Back to questions
Junior — Middle
66
Объясните, что такое типы данных, которые хранят ссылки на объекты в памяти, и чем они отличаются от значимых типов.
Companies where asked
Почтатех
Swiftfactory
Sector Tree
Answer from AI
sobes.tech AI
В C# типы данных делятся на значимые (value types) и ссылочные (reference types).
-
Ссылочные типы хранят в переменной не сами данные, а ссылку (указатель) на область памяти, где находятся данные объекта. Примеры: классы (
class), строки (string), массивы. -
Значимые типы хранят данные непосредственно в переменной. Примеры: структуры (
struct), перечисления (enum), базовые типы (int,boolи т.д.).
Отличия:
- При присваивании значимого типа копируются сами данные, а при присваивании ссылочного типа копируется ссылка на объект.
- Ссылочные типы размещаются в управляемой куче, а значимые типы — обычно в стеке или внутри других объектов.
- Изменения в ссылочном типе через одну ссылку видны через другие ссылки на тот же объект, а у значимых типов копии независимы.
Пример:
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 — копии независимы