Junior — Middle
C# да шилтемелүү түрлөр менен маанилүү түрлөрдүн айырмачылыктары эмнеде жана алардын колдонуудагы негизги айырмачылыктары кандай?
sobes.tech AI
AIден жооп
C# тилинде түрлөр маанилүү (value types) жана шилтемелүү (reference types) түрлөргө бөлүнөт.
Маанилүү түрлөр маалыматтарды түздөн-түз сактайт. Мисалдар: int, double, struct. Белгилөө же методго өткөрүүдө, өзү мааниси көчүрүлөт, башкача айтканда, көзкарандысыз көчүрмө түзүлөт.
Шилтемелүү түрлөр жадыда объектке шилтемени сактайт (heap). Мисалдар: class, string, массивдер. Белгилөөдө, гана шилтеме көчүрүлөт, объект эмес, ошондуктан бир нече өзгөрмө бир эле объектке шилтеме кылышы мүмкүн.
Негизги айырмачылыктар:
- Сактоо: маанилүү түрлөр көбүнчө стекте, шилтемелүү — heapте.
- Көчүрүү: маанилүү түрлөр мааниси менен көчүрүлөт, шилтемелүү — шилтемеси менен.
- Өзгөртүүдө жүрүм-турум: маанилүү түрдү өзгөртүү башка көчүрмөлөргө таасир этпейт, шилтемелүү объекттин өзгөртүлүшү бардык шилтемелерде көрүнөт.
Мисал:
int a = 5;
int b = a; // маанинин көчүрмөсү
a = 10; // a калат 5
class Адам { public string Аты; }
Адам p1 = new Адам { Аты = "Иван" };
Адам p2 = p1; // шилтеменин көчүрмөсү
p2.Аты = "Пётр"; // p1.Аты да өзгөрөт "Пётр"