Andriy Shyrokoryadov

.Net developer, data scientist

Можно ли наследовать структуры - вопрос №13 на собеседование C# / .NET

Текст к видео "Можно ли наследовать структуры" на канале YouTube

Для ответа на этот вопрос необходимо прежде всего освежить в памяти чем является класс и чем является структура.

Класс - формальная запись различных параметров, характеризующих объект в программировании.

Структура – это «легковесный» вид класса. Не вдаваясь в технические подробности, можно сказать, что структура выполняет практически всё тоже само что и класс, но более эффективно. Однако эта эффективность получена за счет введения некоторых ограничений на структуру и поэтому с практической точки зрения нельзя заменить все классы на структуры, чтобы код выполнялся эффективно.

Итак, какие ограничения наложены на структуры:

  • нельзя наследовать структуры;
  • структуры не могут наследовать другие структуры и классы;
  • каждая структура по умолчанию уже содержит конструктор без параметров независимо от того был ли добавлен конструктор с параметрами или нет;
  • если был добавлен конструктор с параметрами (как минимум с 1 параметром), то все поля и свойства структуры должны быть инициализированы;
  • нельзя инициализировать поля в структуре.

Что можно делать со структурами:

  • структуры могут наследовать интерфейсы;
  • в структуре всегда доступен конструктор без параметров;
  • всё структуры наследуют System.Object а это значит, что у программиста есть доступ к методам ToString, GetHashCode, Equals, GetType;

С чем связаны эти ограничения? C тем, что структура — это значимый тип, и в отличие от класса (ссылочный тип), структура хранится в памяти несколько иначе.