при экспериментировании с статическими переменными Я был поражен, узнав, почему статический результат «int» равен 0 (ноль) и нестатический результат для компиляции временной ошибки.C# несвязанные статические значения int до нуля
Рассмотрим случай 1
static int i;
static void Main()
{
Console.Write("Value of i = " + i);
Console.ReadKey();
}
выход
Value of i = 0
Случай 2 с удалением статического
static void Main()
{
int i;
Console.Write("Value of i = " + i);
Console.ReadKey();
}
И выход за это приведет к компиляции ошибка времени
Error 1 Use of unassigned local variable 'i'
вопрос здесь, как оба обстоятельства отличаются друг от друга. Первый результат - 0, а другой - ошибка компилятора.
Ваш второй фрагмент не соответствует «определенному правилу присваивания» в C#. Правило, которое проверяет, что переменная всегда инициализируется. Но у него есть ограничения, он не может легко сказать, что там может быть код где-то еще, где-нибудь еще, который инициализирует статическую переменную. Слишком сложно сделать правильно. Он может работать только с локальными переменными, параметрами, объявленными с ключевым словом 'out', и полями типа struct, используемыми переменной экземпляра. Глава 5.3.2 в спецификации языка. В противном случае у вас есть твердая гарантия, что статические переменные всегда инициализируются до 0 или null. –