Algoritmik tillar va dasturlash. Ma’ruza mashg’ulotlari uchun o’quv qo’llanma. X. E. Xolmirzayev, M. N. Ikromova, M. M. Bahromova Annotatsiya


Qiymat turlari ichida mos yozuvlar turlari



Yüklə 2,87 Mb.
səhifə55/56
tarix19.12.2023
ölçüsü2,87 Mb.
#184841
1   ...   48   49   50   51   52   53   54   55   56
O`quv qo`llanma11 (2)

Qiymat turlari ichida mos yozuvlar turlari. Keling, yanada murakkab misolni ko'rib chiqaylik, agar strukturaning ichida biz mos yozuvlar turidagi o'zgaruvchiga ega bo'lishimiz mumkin, masalan, qandaydir sinf:
State state1 = new State();
State state2 = new State();
state2.country = new Country();
state2.country.x = 5;
state1 = state2;
state2.country.x = 8; // Endi state1.country.x = 8, chunki state1.country va state2.country heap da bir xil ob'ektga ishora qiladi.
Console.WriteLine(state1.country.x); // 8
Console.WriteLine(state2.country.x); // 8
struct State
{
public int x;
public int y;
public Country country = new(); //country ob'ekti uchun xotira ajratish
}
class Country
{
public int x;
public int y;
}

Strukturadagi mos yozuvlar turlarining o'zgaruvchilari heapdagi ob'ektga havolani ham stekda saqlaydi. Va ikkita strukturani tayinlashda state1=state2; state1 tuzilishi heapdagi country ob'ektiga havola ham oladi. Shuning uchun state2.country ni o'zgartirish state1.country ni ham o'zgartiradi.



13.5-rasm.


Ob'ektlarni metod parametrlari sifatida tasniflash. Parametrlarni qiymat va mos yozuvlar bo'yicha o'tkazishda ob'ektlarni xotirada tashkil etishni hisobga olish kerak. Agar metod parametrlari sinf ob'ektlarini ifodalasa, u holda parametrlardan foydalanish o'ziga xos xususiyatlarga ega. Masalan, Person obyektini parametr sifatida qabul qiluvchi metod yarataylik:
Person p = new Person { name = "Tom", age = 23 };
ChangePerson(p);
Console.WriteLine(p.name); // Alice
Console.WriteLine(p.age); // 23
void ChangePerson(Person person)
{
// ishlaydi
person.name = "Alice";
// faqat shu usul doirasida ishlaydi
person = new Person { name = "Bill", age = 45 };
Console.WriteLine(person.name); // Bill
}
class Person
{
public string name = "";
public int age;
}

Sinf ob'ektini qiymat bo'yicha o'tkazishda ob'ekt havolasining nusxasi metodga o'tkaziladi. Ushbu nusxa asl havola bilan bir xil ob'ektga ishora qiladi, shuning uchun biz ob'ektning alohida maydonlari va xususiyatlarini o'zgartirishimiz mumkin, lekin ob'ektning o'zini o'zgartira olmaymiz. Shuning uchun, yuqoridagi misolda faqat person.name = "Alice" qatori ishlaydi.


Yana bir qator person=new Person{name = "Bill", age = 45} xotirada yangi ob'ekt yaratadi va p_erson endi xotiradagi yangi ob'ektga ishora qiladi. Agar biz undan keyin uni o'zgartirsak ham, u Main metodidagi p havolasiga hech qanday ta'sir ko'rsatmaydi, chunki p havolasi hali ham xotiradagi eski ob'ektga ishora qiladi.
Ammo parametrni havola bo'yicha o'tkazishda (ref kalit so'zidan foydalangan holda), xotiradagi ob'ekt havolasi argument sifatida metodga uzatiladi. Shunday qilib, siz ob'ektning maydonlari va xususiyatlarini ham, ob'ektning o'zini ham o'zgartirishingiz mumkin:
Person p = new Person { name = "Tom", age = 23 };
ChangePerson(ref p);
Console.WriteLine(p.name); // Bill
Console.WriteLine(p.age); // 45
void ChangePerson(ref Person person)
{
// ishlaydi
person.name = "Alice";
// ishlaydi
person = new Person { name = "Bill", age = 45 };
}
class Person
{
public string name = "";
public int age;
}


new operatsiyasi xotirada yangi ob'ektni yaratadi va endi person havolasi (Main metodidan p ga havola) xotiradagi yangi ob'ektga ishora qiladi.
O’zlashtirish uchun savollar.

  1. Qanday qiymat turlari mavjud?

  2. Qanday havola turlari mavjud?

  3. Ref kalit so`zining vazifasi

  4. New operatsiyasi qanday vazifani bajaradi?

  5. Obyektlarni metod parametri sifatida qanday qo`llaniladi?



Yüklə 2,87 Mb.

Dostları ilə paylaş:
1   ...   48   49   50   51   52   53   54   55   56




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin