C# の静的クラスの初期化順序は決定的ですか?
C# では、静的クラスは最初に使用されるときに初期化されます。ただし、複数の静的クラス間の初期化の順序は必ずしも明らかではありません。この記事では、C# における静的クラスの初期化の決定論的な性質と、それがコードの実行にどのような影響を与えるかについて説明します。
決定的な初期化順序
静的クラスの初期化の順序は決定されます。次のルールに従います:
例
次のコードを考えてみましょう。
static class B { public static int X = 7; static B() { Console.WriteLine("B.X = " + X); X = A.X; Console.WriteLine("B.X = " + X); } } static class A { public static int X = B.X + 1; static A() { Console.WriteLine("A.X = " + X); } } static class Program { static void Main() { Console.WriteLine("A = {0}, B = {1}", A.X, B.X); } }
このコードは、静的クラスの初期化の決定論的な性質を示しています。 Main で A.X が参照されると、その静的コンストラクターが実行されます。 A.X は B.X を使用して初期化され、これにより B の初期化がトリガーされます。 したがって、コードの出力は常に次のようになります。
A.X = 1 B.X = 7 B.X = 0 A = 1, B = 0
結論
静的クラスの初期化C# では、明確に定義された順序に従います。この順序を理解することは、意図したとおりに動作するコードを作成するために重要です。上記のルールに従うことで、開発者は、複数のコンパイルと実行にわたっても、静的クラスが正しく、一貫して初期化されることを保証できます。
以上がC# の静的クラスの初期化順序は決定的であることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。