Sobes.tech
Junior
141
questionbank

Расскажите о классификации типов в C#.

Answer from AI

sobes.tech AI

Types в C# делятся на две основные категории:

  1. Types значений (Value Types): Хранят данные непосредственно в своей памяти. При присвоении или передаче по значению копируется само значение. Наследуются от System.ValueType. Аллоцируются в стеке (для локальных переменных) или в теле объекта (для полей объектов).

    • Простые типы: int, float, bool, char и т.д.
    • Перечисления (enum)
    • Структуры (struct)
    • Nullable value types (int?, DateTime?)
  2. Ссылочные Types (Reference Types): Хранят ссылку на данные, которые хранятся в куче. При присвоении или передаче по ссылке копируется ссылка, а не сами данные. Не наследуются от System.ValueType.

    • Классы (class)
    • Интерфейсы (interface)
    • Делегаты (delegate)
    • Массивы (array)
    • Строки (string) - хотя ведут себя как immutable value types, являются ссылочным типом.

Основное различие в том, где хранится значение и как ведут себя присваивание и передача в методы.

Пример:

// Value Type
int a = 10;
int b = a; // Копируется значение 10
b = 20; // a остается равным 10

// Reference Type
MyClass obj1 = new MyClass { Value = 10 };
MyClass obj2 = obj1; // Копируется ссылка на тот же объект
obj2.Value = 20; // obj1.Value также становится 20

class MyClass
{
    public int Value { get; set; }
}