那你看看这个结果是什么using   System; class   B 

        public   static   int   Y   =   A.X   +   1; 
        static   B()   {   Console.WriteLine("b");   } 
       } 
class   A 

        public   static   int   X; 
        static   A() 
        { 
                Console.WriteLine("A"+B.Y); 
                X   =   B.Y   +   1; 
        } 
}
class Program

       static   void   Main() 
        { 
                Console.WriteLine("X={0},Y={1}",   A.X,   B.Y); 
        } }结果是x=2,y=1

解决方案 »

  1.   

    静态方法只会加载一次
    加载顺序理应先加载B
    但加载B前时,编译器察觉到B中使用了A的静态方法,因此编译器会在加载B前先去加载A
    因此加载A时,B还未加载并初始化,所以A.X   =   B.Y   +   1 = 0 + 1 = 1
    A加载完后接着加载B,B.Y   =   A.X   +   1 = 1 + 1 = 2
    所以,A.X = 1   B.Y = 2
      

  2.   

    理由很简单:B类是程序入口点
    先初始化B 局部变量Y;并先计算 A.X+1 而A.X会调用其的构造函数 X=B.Y+1 
    并调用B.Y 而 B.Y 没有被赋值.所以Y取默认值0
    返回到X=B.Y+1=〉A.X=1,Y=A.X+1=>B.Y=2
    然后调用 B的构造函数
    然后主函数 执行 Console.WriteLine("X={0},Y={1}",   A.X,   B.Y); 语句
    调用 A.X,B.Y 时,先判断内存中是否有这个字段 有就使用
    所以 x=1,y=2
      

  3.   

    补充一点
    就是 初始化Y是先Y=0;
    而 后计算A.X+1 并赋给Y