Sobes.tech
Junior — Middle

Какво е разликата между референтните типове и типовете стойности в C# и какви са основните им различия при използване?

sobes.tech AI

Отговор от AI

В C# типовете се делят на стойностни (value types) и референтни (reference types).

Стойностните типове съхраняват данните директно. Примери: int, double, struct. При присвояване или предаване към метод, самата стойност се копира, тоест се създава независима копие.

Референтните типове съхраняват препратка към обект в паметта (на купчината). Примери: class, string, масиви. При присвояване се копира само препратката, не обектът, така че няколко променливи могат да сочат към един и същ обект.

Основни разлики:

  • Съхранение: стойностните типове обикновено на стека, референтните — в купчината.
  • Копиране: стойностните типове се копират по стойност, референтните — по препратка.
  • Поведение при промяна: промяната на стойностен тип не влияе на други копия, промяната на обект от референтен тип се отразява във всички препратки.

Пример:

int a = 5;
int b = a; // копие на стойността
a = 10; // a ще остане 5

class Person { public string Name; }
Person p1 = new Person { Name = "Иван" };
Person p2 = p1; // копие на препратката
p2.Name = "Пётр"; // p1.Name също ще се промени на "Пётр"