Нет, локальные переменные не имеют значения по умолчанию 1 . Они должны быть определенно назначены , прежде чем вы их прочитаете. Это уменьшает вероятность того, что вы используете переменную, которую думаете , которой вы дали разумное значение, когда на самом деле она имеет какое-то значение по умолчанию. Это нельзя сделать, например, для статических переменных, потому что вы не знаете, в каком порядке будут вызываться методы.
См. Раздел 5.3 спецификации C # 3.0 для более подробной информации о конкретном назначении.
Обратите внимание, что это не имеет никакого отношения к тому, что это переменная ссылочного типа. Это не удастся скомпилировать таким же образом:
int i;
if (i == 0) // Nope, i isn't definitely assigned
{
}
1 Что касается языка, то в любом случае ... ясно, что место хранения в памяти содержит что-то , но оно не имеет значения и зависит от реализации. Существует один способ узнать, что это за значение, создав метод с параметром out
, но затем используя IL для просмотра значения этого параметра в методе, не задав ему другого значение. CLR не возражает против этого вообще. Затем вы можете вызвать этот метод, передав не определенную переменную, и вот, вы можете обнаружить значение - которое, скорее всего, будет значением "все нули".
Я подозреваю, что спецификация CLI обеспечивает принудительное применение локальных переменных, имеющих значение по умолчанию - но я должен проверить. Если вы не делаете злых дел, как указано выше, это не должно иметь значения для вас в C #.