TGViewer
C# 1001 notes C# 1001 notes @csharp_1001_notes · 6.67K subscribers
Post #35 1.57K
​​Value и reference типы в языке C#

Значимые и ссылочные типы являются по праву одними из базисов языка C#, а вопрос об их отличиях, как следствие, одним из самых избитых на собеседованиях, поэтому сегодня я постараюсь ответить на него со всеми подробностями:

Значимые типы:

🔸 Унаследованы от System.ValueType (которые, в свою очередь, от System.Object)

🔸 Переменная хранит непосредственно значение, а в случае присваивания его копию

🔸 В качестве аргументов передаются по значению (копируются)

🔸 Не очищаются сборщиком мусора, не имеют деструктор и финализатор

🔸 Объявляются как структура (struct) или перечисление (enum)

🔸 Объявлены с модификатором sealed, а значит не могут выступать базовыми типами для наследников

Ссылочные типы:

🔸 Унаследованы от System.Object или иного ссылочного типа

🔸 Память под экземпляры выделяется в управляемой куче (managed heap)

🔸 Переменная хранит адрес (указатель) на участок памяти в управляемой куче, где уже хранится непосредственно значение (или null)

🔸 В качестве аргументов передаются по ссылке (указатель)

🔸 Очищаются сборщиком мусора

🔸 Объявляются как класс (class), делегат (delegate) или интерфейс (interface)

🔸 Поддерживают наследование

Одной из лучших и наиболее ёмких, на мой взгляд, статей по этой теме является Memory in .NET - what goes where от Jon Skeet'а.

💬 Я намеренно не стал приводить информацию о том, что значимые типы хранятся в стеке (потока выполнения). Дело в том, что это не совсем так. Подробнее про детали реализации value type и механизм выделения памяти для значений можно почитать в статье Eric Lipert'а: The Truth About Value Types.

✅ Понравилась заметка? Так поделись и с другими 😉

#data_types
More from @csharp_1001_notes
  1. Sep 28, 2026«Ядро Windows NT во многом превосходит Linux», считает исследовательница Google и бывший р…
  2. Sep 24, 2026Ваш .NET API работает локально. Готов ли он к продакшену? Чек-лист из 8 проверок перед рел…
  3. Sep 20, 2026🧩 C# Channels: сообщение попало в очередь. Почему обработчик его не получил? Два воркера…
  4. Sep 16, 2026Эта задача проверяет понимание Memory<T>, pooling, ownership, IAsyncEnumerable, cancellati…
  5. Sep 16, 2026# C# 14: хитрая задача на ArrayPool, IAsyncEnumerable и время жизни памяти Есть поток данн…
  6. Sep 14, 2026# C# 14: конкурентный кеш без race condition Реализуйте потокобезопасный кеш: public seale…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →