В С# structs - типы значений, но я могу new
их, как если бы они были ссылочными типами. Почему это?
Если struct - тип значения, почему я могу его создать?
Ответ 1
Потому что у них есть конструкторы.
В этом случае все значения и ссылочные типы имеют конструкторы (по крайней мере, конструктор по умолчанию, не имеющий аргументов, если сам тип не определяет).
Ответ 2
Оператор new
не означает, что он может использоваться только для ссылочных типов. Его также можно использовать со значениями типов.
Используется для создания объектов и вызывать конструкторы.
Поскольку каждый тип значения неявно имеет открытый конструктор по умолчанию, все типы значений имеют значения по умолчанию. Вы можете прочитать Таблица значений по умолчанию.
Например:
int i = new int(); // i will be 0 for because its default values.
Значение по умолчанию для типа структуры;
Значение, созданное установкой всех полей значения типа их значения по умолчанию значения и все поля ссылочного типа: null.
Также из MSDN:
При создании объекта структуры с использованием нового оператора он получает и соответствующий конструктор называется. В отличие от классов, structs могут быть созданы без использования нового оператора. Если вы это сделаете не использовать новые, поля остаются неназначенными, и объект не может используется до тех пор, пока все поля не будут инициализированы.
Ответ 3
Вы также можете "добавить" целое число.
Разница заключается в том, что вы CANT передаете ссылочный класс по значению.
Ответ 4
Здесь говорится, что здесь в документе MSDN, оператор new
используется для вызова конструктора по умолчанию типа значения.
Ответ 5
Вам не нужно использовать новый оператор для создания структуры. Если вы это сделаете, вызывается его конструктор, если вы не все поле останется неназначенным.