先看代码
class A
{
public static int X;
static A(){
X=B.Y+1;
}
}
class B
{
public static int Y=A.X+1;
static B(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
Console.Read();
}
}
问输出结果是什么?
基本原理:CLR对于类型的初始化器,有两种调用时机
1)CLR保证在类型的任何一个静态成员被调用之前,调用类型初始化器。
当类型显示定义初始化器,不添加BeforeFieldInit元数据属性,
2)CLR保证在类型的任何一个成员被调用之前,调用类型初始化器。
没有显示初始化器,CLR添加BeforeFieldInit元数据。
结果居然是这样,我不明白,请各位指教。