Подтвердить что ты не робот

Если struct - тип значения, почему я могу его создать?

В С# structs - типы значений, но я могу new их, как если бы они были ссылочными типами. Почему это?

4b9b3361

Ответ 1

Потому что у них есть конструкторы.

Оператор new не означает "это ссылочный тип" ; это означает, что "у этого типа есть конструктор" . Когда вы new создаете экземпляр, и при этом вы вызываете конструктор.

В этом случае все значения и ссылочные типы имеют конструкторы (по крайней мере, конструктор по умолчанию, не имеющий аргументов, если сам тип не определяет).

Ответ 2

Оператор

new не означает, что он может использоваться только для ссылочных типов. Его также можно использовать со значениями типов.

От новый оператор

Используется для создания объектов и вызывать конструкторы.

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

Например:

int i = new int(); // i will be 0 for because its default values.

Значение по умолчанию для типа структуры;

Значение, созданное установкой всех полей значения типа их значения по умолчанию значения и все поля ссылочного типа: null.

Также из MSDN:

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

Ответ 3

Вы также можете "добавить" целое число.
Разница заключается в том, что вы CANT передаете ссылочный класс по значению.

Ответ 4

Здесь говорится, что здесь в документе MSDN, оператор new используется для вызова конструктора по умолчанию типа значения.

Ответ 5

Вам не нужно использовать новый оператор для создания структуры. Если вы это сделаете, вызывается его конструктор, если вы не все поле останется неназначенным.