静的変数をテストしているのですが、なぜスタティックな "int"結果が0(ゼロ)で、スタティックでない結果がコンパイルエラーになるのか驚いていました。C#unassigned static int結果がゼロになる
は、出力がスタティック
static void Main()
{
int i;
Console.Write("Value of i = " + i);
Console.ReadKey();
}
そしてこれの出力は、時間の誤差に
をコンパイルする結果となるの除去とValue of i = 0
ケース2の場合1
static int i;
static void Main()
{
Console.Write("Value of i = " + i);
Console.ReadKey();
}
考えてみましょう
Error 1 Use of unassigned local variable 'i'
ここでは、両方のケースが最初の1つの結果が0になり、もう1つの結果が0になり、もう1つがコンパイラエラーを取得します。
2番目のスニペットがC#の「明確な割り当てルール」に失敗しました。変数が常に初期化されることを検証するルール。しかし、それには限界があり、静的変数を初期化するどこか他の場所でコード化するかもしれないと簡単には分かりません。正確にするのはあまりにも困難です。ローカル変数、 'out'キーワードで宣言されたパラメータ、およびインスタンス変数によって使用されるstruct型のフィールドでのみ機能します。言語仕様の第5.3.2章。それ以外の場合は、静的変数は常に0またはnullに初期化されることを強く保証します。 –