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

先看代码
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

posted @ 2010-02-02 14:27  信息化建设  阅读(632)  评论(1编辑  收藏  举报