|
struct Davlat
{
public int
|
bet | 97/154 | Sana | 08.01.2024 | Hajmi | 5,29 Mb. | | #131939 |
Bog'liq Majmuastruct Davlat
{
public int x;
public int y;
}
class Mamlakat
{
public int x;
public int y;
}
Bu yerda, Main metodida davlat1 obyekti uchun xotira stekga ajratiladi. Keyinchalik, stekda mamlakat1 obyekti uchun mos havola yaratiladi va new kalit so‘zi bilan konstruktor chaqiruvidan foydalanib, to‘pda joy ajratiladi (new Mamlakat()). mamlakat1 obyekti uchun stek havolasi obyekt joylashgan to‘pdagi joylashuv manzilini ifodalaydi.
Stek
|
|
To‘p (heap)
|
mamlakat1
|
|
mamlakat1.x
|
davlat1.y
|
|
mamlakat1.y
|
davlat1.x
|
|
|
|
|
Shunday qilib, mamlakat1 obyektining barcha maydonlari va to‘pdagi mamlakat1 obyektiga havola stekda bo‘ladi.
Qiymatlarni nusxalash
Qiymatlarni nusxalashda havola turini hisobga olish kerak. Qiymat turidagi obyektga havola tayinlaganda, u berilganlarning nusxasini oladi. Berilganlarni mos havola turidagi obyektga tayinlashda u obyektning nusxasini emas, balki to‘pdagi ushbu obyektga havolani oladi. Misol uchun:
using System;
namespace Havolalar
{
class Program
{
public static void Main(string[] args)
{
// Davlat strukturasi obyektlari
Davlat davlat1 = new Davlat();
Davlat davlat2 = new Davlat();
davlat2.x = 1;
davlat2.y = 2;
davlat1 = davlat2;
davlat2.x = 5;
Console.WriteLine(davlat1.x); // 1
Console.WriteLine(davlat2.x); // 5
// Mamlakat sinfi obyektlari
Mamlakat mamlakat1 = new Mamlakat();
Mamlakat mamlakat2 = new Mamlakat();
mamlakat2.x = 1;
mamlakat2.y = 4;
mamlakat1 = mamlakat2;
mamlakat2.x = 7;
Console.WriteLine(mamlakat1.x); // 7
Console.WriteLine(mamlakat2.x); // 7
}
}
struct Davlat
{
public int x;
public int y;
}
class Mamlakat
{
public int x;
public int y;
}
}
davlat1 struktura bo‘lgani uchun davlat1 = holat2 tayinlanganda, davlat2 strukturasining nusxasini oladi va mamlakat1 = mamlakat2 ni belgilashda mamlakat1 sinfining obyekti; mamlakat2 tomonidan ko‘rsatilgan bir xil obyektga havola oladi. Shuning uchun mamlakat2 o‘zgarishi bilan mamlakat1 ham o‘zgaradi.
Qiymat turlari ichidagi mos havola turlar
Strukturaning ichida mos havola turidagi o‘zgaruvchiga ega bo‘lish mumkin, masalan:
Davlat davlat1 = new Davlat();
Davlat davlat2 = new Davlat();
davlat2.mamlakat = new Mamlakat();
davlat2.mamlakat.x = 5;
davlat1 = davlat2;
davlat2.mamlakat.x = 8; // haliyam davlat1.mamlakat.x = 8, chunki davlat1.mamlakat va davlat2.mamlakat to‘pda bir narsaga ishora qiladi
Console.WriteLine(davlat1.mamlakat.x); // 8
Console.WriteLine(davlat2.mamlakat.x); // 8
struct Davlat
{
public int x;
public int y;
}
class Mamlakat
{
public int x;
public int y;
}
Bu yerda, Main() metodida davlat1 obyekti uchun xotira stekda ajratiladi. Keyinchalik, mamlakat1 obyekti (Mamlakat mamlakat1) uchun stekda havola yaratiladi va konstruktorni new kalit so‘zi bilan chaqirish orqali to‘pda bo‘sh joy ajratiladi (new Mamlakat ()). mamlakat1 obyekti uchun stek havolasi obyekt joylashtirilgan to‘pdagi joylashuv manzilini ifodalaydi.
ref va out kalit so‘zlari
int yoki char kabi oddiy turdagi berilganlar qiymatga qarab metodga o‘tkaziladi. Bu qiymatni oladigan parametrga kiritilgan o‘zgartirish uni chaqirish uchun ishlatilgan argumentga ta’sir qilmaydi degan ma’noni anglatadi. Ammo bu jarayonlar oddiy turlarning qiymatlarini havolalarga o‘tish uchun ref va out kalit so‘zlari yordamida o‘zgartirilishi mumkin. Bu metodni chaqirganda belgilangan argumentni o‘zgartirishga imkon beradi.
ref va out kalit so‘zlardan foydalanishning o‘ziga xos xususiyatlariga o‘tishdan oldin, ba’zan havolalar orqali oddiy turdagi qiymatni o‘tkazish talab qilinadigan sabablarni tushunish kerak. Buning ikkita sababi bor: metodga o‘z argumentlarining qiymatini o‘zgartirishga yoki bir nechta qiymatlarni qaytarishga ruxsat berish.
Ko‘pincha metod unga berilgan qiymatlar asosida ishlashi talab qilinadi. Oddiy misol almashtirish() metodi, uning argumentlari qiymatlarini o‘zgartiradi. Oddiy turlarning argumentlari qiymat bo‘yicha uzatilayotganligi sababli, C# da tanlangan standart chaqiruv mexanizmidan foydalanib, parametrga argument berish, uning ikkita argument qiymatlarini o‘zaro almashtiradigan metodni yozish mumkin emas, masalan, int turi. Ushbu qiyinchilik ref modifikatori tomonidan hal qilinadi.
Qiymat dasturni chaqiruvchi qismi metodidan qaytarish kodi yordamida qaytariladi. Ammo metod bir vaqtning o‘zida faqat bitta qiymatni qaytarishi mumkin. Ammo metoddan, sonli qiymatning butun va kasr qismlarini suzuvchi nuqta bilan qaytarish kerak bo‘lsa, nima qilish kerak? Bunday metod out modifikator yordamida yozilishi mumkin.
|
| |