Junior — Middle
Ինչպես են տարբերվում հղման տեսակները արժեքային տեսակներից C#-ում և ինչ են նրանց հիմնական տարբերությունները օգտագործման մեջ։
sobes.tech AI
Պատասխան AI-ից
C#-ում տիպերը բաժանվում են արժեքային (value types) և հղումային (reference types) տիպերի:
Արժեքային տիպեր անմիջապես պահում են տվյալները։ Օրինակներ՝ int, double, struct։ Երբ նշանակվում կամ փոխանցվում է մեթոդին, ինքն արժեքը պատճենվում է, այսինքն՝ ստեղծվում է անկախ պատճեն։
Հղումային տիպեր պահում են օբյեկտի հղումը հիշողության մեջ (համախառնիչում)։ Օրինակներ՝ class, string, զանգվածներ։ Երբ նշանակվում է, պատճենվում է միայն հղումը, ոչ թե օբյեկտը, ուստի մի քանի փոփոխական կարող են հղում ունենալ նույն օբյեկտին։
Հիմնական տարբերությունները՝
- Պահպանում: արժեքային տիպերը սովորաբար stack-ում, հղումայինները՝ heap-ում։
- Պատճենում: արժեքային տիպերը պատճենվում են արժեքով, հղումայինները՝ հղումով։
- Կարգավիճակ փոփոխության ժամանակ: արժեքային տիպի փոփոխությունը չի ազդում մյուս պատճենների վրա, հղումային տիպի օբյեկտի փոփոխությունը արտացոլվում է բոլոր հղումներում։
Օրինակ՝
int a = 5;
int b = a; // արժեքի պատճեն
a = 10; // a կմնա 5
class Անձ { public string Անուն; }
Անձ p1 = new Անձ { Անուն = "Иван" };
Անձ p2 = p1; // հղման պատճեն
p2.Аնուն = "Пётр"; // p1.Аնուն նույնպես կփոխվի "Пётр"