Junior — Middle
Обяснете какви са типовете данни, които съхраняват препратки към обекти в паметта, и как се различават от стойностните типове.
sobes.tech AI
Отговор от AI
В C# типовете данни се делят на стойностни типове (value types) и референтни типове (reference types).
-
Референтните типове съхраняват в променливата не самите данни, а препратка (указател) към областта в паметта, където се намират данните на обекта. Примери: класове (
class), низове (string), масиви. -
Стойностните типове съхраняват данните директно в променливата. Примери: структури (
struct), изброявания (enum), основни типове (int,boolи др.).
Разлики:
- При присвояване на стойностен тип, се копират самите данни, а при присвояване на референтен тип, се копира препратката към обекта.
- Референтните типове се разполагат в управлявания куп (heap), а стойностните типове — обикновено в стека или вътре в други обекти.
- Промените в референтен тип чрез една препратка са видими и през други препратки към същия обект, а при стойностните типове копията са независими.
Пример:
class Person { public string Name; }
struct Point { public int X, Y; }
Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // копиране на препратката
p2.Name = "Bob";
Console.WriteLine(p1.Name); // Ще изведе "Bob" — и двете препратки сочат към един и същи обект
Point pt1 = new Point { X = 1, Y = 2 };
Point pt2 = pt1; // копиране на данните
pt2.X = 10;
Console.WriteLine(pt1.X); // Ще изведе 1 — копията са независими