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 също ще се промени на "Пётр"