私はいくつかの検索を行いましたが、次のコードは出力を生成することが保証されていると思います:
B.X = 7
B.X = 0
A.X = 1
A = 1, B = 0
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);
}
}
これを何度も実行しましたが、常にコード セクションの上に出力が表示されます。確認したかったのですが、変更されますか?文章的にも、クラスA
とクラスB
が再配置されていますか?
静的オブジェクトを最初に使用すると、その静的メンバーの初期化がトリガーされ、続いてその静的コンストラクターがインスタンス化されることが保証されていますか? このプログラムではA.X
、 main で を使用すると の初期化がトリガーされ、次にA.X
が初期化され、 の初期化が終了した後、 に進みます。最後に、BX`を出力します。B.X
B()
A.X
A()
Main()
A.X