それで、私はエリック・リッパートからこれを喜んで読んでいました、そしてもちろん、ジョン・ペイソンが言った素晴らしいコメントを読んでいました:
より興味深い例は、2 つの静的クラスを使用することでした。そのようなプログラムは、目に見えるブロッキング ステートメントがなくてもデッドロックする可能性があるからです。
ええ、それは簡単だと思ったので、これをノックアップしました:
public static class A
{
static A()
{
Console.WriteLine("A.ctor");
B.Initialize();
Console.WriteLine("A.ctor.end");
}
public static void Initialize()
{
Console.WriteLine("A.Initialize");
}
}
public static class B
{
static B()
{
Console.WriteLine("B.ctor");
A.Initialize();
Console.WriteLine("B.ctor.end");
}
public static void Initialize()
{
Console.WriteLine("B.Initialize");
}
public static void Go()
{
Console.WriteLine("Go");
}
}
( を呼び出した後のB.Go()
)出力は次のとおりです。
B.ctor
A.ctor
B.Initialize
A.ctor.end
A.Initialize
B.ctor.end
Go
行き詰まりはなく、私は明らかに敗者です - 恥ずかしさを永続させるために、ここに私の質問があります: なぜここで行き詰まりがないのですか?
の静的コンストラクターが終了する前B.Initialize
に呼び出されるのは私の小さな脳には思えますが、それは許可されていないと思いました。B