Структуры и разновидность

Структура (классическая) — это конструкция языка, позволяющая содержать в себе набор полей различных типов.

Структуры появились еще во времена процедурного программирования, когда еще не было ООП, созданы они были для удобства программирования. Применялись для группировки схожих по смыслу роду деятельности переменных.

В структурах нельзя инициализировать поля непосредственно в месте создания. Инициализация статических полей необязательна.

Структуры хранятся в стеке и обычно используются для инкапсуляции небольших групп связанных переменных.

  • Стек – это специальная область памяти в которой хранятся структурные типы.

Структуры могут содержать конструкторы, константы, поля, методы, свойства, индексаторы, операторы, события и вложенные типы, однако, если требуются несколько таких членов, рекомендуется использовать тип class .

При наличии пользовательского конструктора, все не инициализированные поля должны быть в нем инициализированы.

  • Структурам запрещается иметь конструктор по умолчанию.
  • Структуры могут реализовывать интерфейсы, но они не могут наследоваться от структур или классов, по сколько уже наследуются не явно от абстрактного класса ValueType .
  • В C# можно наследоваться только от одного класса и множество интерфейсов. От структур наследоваться запрещено!
  • Структуры могут содержать вложенные структуры и классы.

Поведение структур:

  • Структуры размещаются в стеке .
  • При копировании структур, создаётся отдельная копия объекта, которая живёт «своей жизнью».
  • От структур нельзя наследоваться.
  • Структуры могут наследоваться только от интерфейсов.
  • Не разрешается дополнение своими свойствами;
  • При передаче структуры как параметра передается вся структура.
  • В структуре нельзя создать конструктор по умолчанию.
  • Структура уничтожается при выходе за пределы видимости.

В чем разница между структурами и классами?

Давайте выделим их главные отличия:

  • В структурах нельзя инициализировать поля непосредственно в месте создания, а в классах можно.
  • Попытка вызова значения не инициализированного поля в структурах приведет к ошибке.
  • В структурах в отличии от классов, нельзя явно создавать конструктор по умолчанию.
  • Если в коде имеется пользовательский конструктор, он обязан про инициализировать все поля в структурах иначе возникнет ошибка, в классах это делать не обязательно.
  • Структуры могут быть как динамические в этом случаи они располагаются на куче, и статичные в этом случаи они располагаются в стеке. А классы всегда на куче.
  • Статический конструктор будет вызываться в связке с пользовательским конструктором в случаи структур.

Boxing — UnBoxing

Упаковка представляет собой процесс преобразования структурного типа в тип object или любой другой тип интерфейса, реализуемый этим типом. Операция распаковки извлекает структурный тип из объекта.

Упаковка(Boxing) — преобразование структурного типа(типа значения) в ссылочный тип (Object или любой другой тип интерфейса, реализуемый этим типом значения). Когда тип значения упаковывается средой CLR, она создает программу-оболочку значения внутри System.Object и сохраняет ее в управляемой куче.

Распаковка (Unboxing) — преобразование ссылочного типа в структурный тип. Операция распаковки-преобразования извлекает тип значения из объекта. Перед распаковкой среда выполнения проверяет совместимость между объектом и структурой, в которую будет происходить распаковка. Распаковка должна производиться только в тот тип, из которого производилась упаковка.

Обновлено: 12.02.2018 — 22:22

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.