Sobes.tech
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 — копии независимы