Ответ 1
Это 0. Оно не может быть нулевым, поскольку значение null не является допустимым значением int
.
Из раздела 7.6.10.4 спецификации С# 5:
Все элементы экземпляра нового массива инициализируются значениями по умолчанию (§5.2).
И из раздела 5.2:
Значение переменной по умолчанию зависит от типа переменной и определяется следующим образом:
- Для переменной типа значения значение по умолчанию совпадает с значением, вычисленным конструктором default-types по умолчанию (§ 4.1.1).
- Для переменной ссылочного типа значение по умолчанию равно null.
Инициализация значений по умолчанию обычно выполняется путем того, что диспетчер памяти или сборщик мусора инициализируют память до всех бит-ноль, прежде чем он будет назначен для использования. По этой причине удобно использовать all-bits-zero для представления нулевой ссылки.
(В качестве детализации реализации есть несколько хитростей вокруг первой точки маркера. Хотя сам С# не позволяет объявлять конструктор без параметров для типов значений, вы можете создать свои собственные конструкторы без параметров для типов значений в IL. Не верю, что эти конструкторы вызываются в инициализации массива, но они будут вызываться в выражении new X()
в С#. Однако это вне области С# spec.)