类型的初试化器的调用时机

先看代码
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元数据。

结果居然是这样,我不明白,请各位指教。
 
image

原文地址:https://www.cnblogs.com/JamesLi2015/p/1661790.html