Структуры в С#. Особые моменты о которых не рассказывают лекторы.

Привет всем,
В этой статье я хочу отразить некоторые моменты о которых не рассказывают в видео уроках и на курсах. Описанное ниже, это вычитка из разных статей.

и так погнали…

Структура(классическая) — это конструкция языка, позволяющая содержать в себе набор полей различных типов.
——————
struct Strust
{
int field;
static int second;
}
——————
+ В структурах нельзя инициализировать поля непосредственно в месте создания. Инициализация статических полей необязательно.

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

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

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

+ Ключевое слово new предполагает создание объекта на «куче».

+ Если в структуре имеются члены, которые обращаются к полю и нет пользовательского конструктора, то требуется при создании экземпляра вызывать конструктор по умолчанию(иначе будет ошибка).

+ Конструкторы по умолчанию нельзя задавать явно.

+ В структурах всегда присутствует конструктор по умолчанию, в независимости есть ли пользовательский конструктор или нет.

+ В структуре нельзя создавать конструктор по умолчанию.

+ Если в структуре имеется пользовательский конструктор, то в нем должны быть инициализированы все поля имеющиеся в структуре.

+ Все структуры не явно наследуются от value type(абстрактный класс).

+ Структуры могут содержать статические члены.

+ Статические структуры недопустимы.

+ Инициализация статических полей необязательна.

+ Если происходит вызов пользовательского конструктора, то статический конструктор всегда отрабатывает первым.

+ Если структуры расположены в массиве, то они будут размещены на «куче».

+ Экземпляр структурного типа располагается на куче если они представлен как член класса.

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

+ В C# можно наследовать только от класса и множества интерфейсов. От структур наследование запрещено.

+ Структуры не могут иметь protected членов.

+ Наследование структур разрешено только от интерфейсов.

Также важно знать!!!
*Объекты ссылочного типа находятся в специальной области памяти называемой «Куча».
*Стэк — это специальная область памяти в которой хранятся структурные типы.
*В стэке также храняться адреса возврата хранимых процедур, а также все локальные переменные методов.
*Процессор никогда ни заходит в стэк.
*Размер стэка равен 1 мб.
*Деструкторы — удаляют объекты из памяти. Деструктор это специальный метод, в котором записываются какие то финализирующие действия.
*Планировщик кучи — на основе данных от сборщика мусора, удаляет не актуальные объекты.
*Сборщик мусора(Garbage collector) — проверяет актуальность объектов на куче.
*StackOverFlowException — не обрабатываемое исключение.
*Все массивы не явно наследуются от абстрактного класса Array.

Если что то еще можно добавить, укажите это в комментарии.

0

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

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