Классы - ссылочные типы, структуры - значимые типы.
- Размещение в памяти: Экземпляры классов размещаются в управляемой куче (Heap), экземпляры структур - в стеке (Stack) или внутри объекта, которому принадлежат.
- Наследование: Классы поддерживают наследование, структуры - нет. Структуры могут реализовывать интерфейсы.
- Значение по умолчанию: Для классов
null
является значением по умолчанию. Для структур - набор нулей для полей.
- Передача в методы: Экземпляры классов передаются по ссылке (передается ссылка на объект). Экземпляры структур передаются по значению (создается копия).
- Производительность: Структуры могут быть быстрее классов для небольших объектов, так как избегаются издержки на управление кучей и сборку мусора. Однако передача больших структур по значению может быть менее эффективной.
- Создание: Для структур неявный конструктор без параметров инициализирует поля нулями. Для классов требуется явный конструктор без параметров, если определены другие конструкторы.
Признак | Класс (Class) | Структура (Struct) |
---|
Тип | Ссылочный | Значимый |
Размещение | | |