Sobes.tech
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.Аты да өзгөрөт "Пётр"