Ответ 1
Выдержки из Библии ECMA, стих 334:
12.2 Значения по умолчанию
Значение переменной по умолчанию зависит от типа переменной и определяется следующим образом:
- Для переменной типа значения значение по умолчанию совпадает с значением, вычисленным конструктором по умолчанию типа value (§11.1.1).
- Для переменной ссылочного типа значение по умолчанию
null
.
[Примечание. Инициализация значений по умолчанию обычно выполняется с помощью диспетчера памяти или сборщика мусора инициализируйте память до всех бит-ноль, прежде чем она будет выделена для использования. По этой причине удобно использовать all-bitszero для представления нулевой ссылки. end note]
Значение по умолчанию для типа nullable - это экземпляр, для которого свойство HasValue
false
. Ссылка на
Свойство Value значения по умолчанию для типа NULL приводит к исключению типа
System.InvalidOperationException
. Значение по умолчанию также известно как нулевое значение
нулевой тип. Неявное преобразование существует из нулевого типа (§11.2.7) в любой тип с нулевым значением, и это
преобразование создает нулевое значение типа.
18.3.4 Значения по умолчанию
Как описано в §12.2, несколько видов переменных автоматически инициализируются значением по умолчанию, когда они созданы. Для переменных типов классов и других ссылочных типов это значение по умолчанию равно null. Однако, поскольку structs - это типы значений, которые не могут быть null, значением по умолчанию для struct является значение, созданное устанавливая все поля типа значения в их значение по умолчанию и все поля ссылочного типа равны null.
Пример: ссылаясь на описанную выше конструкцию Point, пример
Point[] a = new Point[100];
инициализирует каждую точку в массиве значением, создаваемым установкой полей x и y в ноль.
Значение по умолчанию для структуры соответствует значению, возвращаемому конструктором по умолчанию структуры (§11.1.1). В отличие от класса, struct не разрешается объявлять конструктор экземпляров без параметров. Вместо этого каждая структура неявно имеет конструктор экземпляров без параметров, который всегда возвращает полученное значение от установки всех полей типа значения до их значения по умолчанию и всех полей ссылочного типа в значение null.
11.1.2 Конструкторы по умолчанию
Все типы значений неявно объявляют открытый конструктор экземпляров без параметров, называемый конструктором по умолчанию. Конструктор по умолчанию возвращает нулевой инициализированный экземпляр, известный как значение по умолчанию для типа значения:
- Для всех простых типов значением по умолчанию является значение, созданное битовой диаграммой всех нулей:
- Для sbyte, byte, short, ushort, int, uint, long и ulong значение по умолчанию
0
. - Для char значение по умолчанию
'\x0000'
. - Для float значение по умолчанию
0.0f
. - Для double значение по умолчанию
0.0d
. - Для десятичного значения по умолчанию
0m
. - Для bool значение по умолчанию
false
.
- Для sbyte, byte, short, ushort, int, uint, long и ulong значение по умолчанию
- Для типа enum-типа E значение по умолчанию
0
. - Для структурного типа значением по умолчанию является значение, созданное установкой всех полей типа значения в их значение по умолчанию, а все поля ссылочного типа -
null
. - Для типа с нулевым значением значением по умолчанию является значение, для которого
HasValue
возвращаетfalse
.
Аминь
Вы можете загрузить святую книгу (версия 4.0) непосредственно с веб-сайта Microsoft.