ホームページ >バックエンド開発 >C++ >C# の静的クラスの初期化順序は決定的であることが保証されていますか?

C# の静的クラスの初期化順序は決定的であることが保証されていますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 15:07:40578ブラウズ

Is C#'s Static Class Initialization Order Guaranteed to Be Deterministic?

C# の静的クラスの初期化順序は決定的ですか?

C# では、静的クラスは最初に使用されるときに初期化されます。ただし、複数の静的クラス間の初期化の順序は必ずしも明らかではありません。この記事では、C# における静的クラスの初期化の決定論的な性質と、それがコードの実行にどのような影響を与えるかについて説明します。

決定的な初期化順序

静的クラスの初期化の順序は決定されます。次のルールに従います:

  • 静的フィールド初期化子が
  • クラスに静的コンストラクターが存在する場合、クラスの静的メンバーのいずれかが参照されたとき、またはクラスのインスタンスが作成されたときに、その実行がトリガーされます。
  • クラスに Main メソッドが含まれる場合、Main メソッドが実行される前にその静的コンストラクターが実行されます。

次のコードを考えてみましょう。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。