Sobes.tech
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.Аնուն նույնպես կփոխվի "Пётр"