Junior — Middle
C# da referans turlari va qiymat turlari qanday farq qiladi va ularning foydalanishdagi asosiy farqlari qanday?
sobes.tech AI
AIdan javob
C# da turlar qiymat turlari (value types) va referens turlarga (reference types) bo'linadi.
Qiymat turlari ma'lumotlarni to'g'ridan-to'g'ri saqlaydi. Misollar: int, double, struct. Belgilash yoki metodga o'tkazishda, o'zi qiymat nusxalanadi, ya'ni mustaqil nusxa yaratiladi.
Referens turlari xotirada ob'ektga havolani saqlaydi (xotira bo'lagi). Misollar: class, string, massivlar. Belgilashda, faqat havola nusxalanadi, ob'ekt emas, shuning uchun bir nechta o'zgaruvchilar bir xil ob'ektga murojaat qilishi mumkin.
Asosiy farqlar:
- Saqlash: qiymat turlari odatda stekda, referens turlari xotira bo'lagida.
- Nusxalash: qiymat turlari qiymat bilan nusxalanadi, referens turlari havola bilan.
- O'zgartirishda xulq: qiymat turini o'zgartirish boshqa nusxalarni ta'sir qilmaydi, referens turidagi ob'ekt o'zgarishi barcha havolalarda aks etadi.
Misol:
int a = 5;
int b = a; // qiymat nusxasi
a = 10; // a o'zgarmaydi, 5 qoladi
class Shaxs { public string Ism; }
Shaxs p1 = new Shaxs { Ism = "Иван" };
Shaxs p2 = p1; // havola nusxasi
p2.Ism = "Пётр"; // p1.Ism ham "Пётр" ga o'zgaradi