static void Main()
        {            Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);        }
        class A
        {            public static int X = B.Y;            static A()
            {
                ++X;
            }
        }        class B
        {
            public static int Y = A.X;
            static B()
            {
                ++Y;
            }        }Console.WriteLine("X = {0}, Y = {1}", A.X
调试时 顺序
       1   public static int X = B.Y;
        2    public static int Y = A.X;
        3    static B()
         4   {
                ++Y;
             }5           static A()
            {
                ++X;
            }
第二次时 执行的是什么? 是 Y = A.X; 还是 静态成员初始化语句 如果是 Y = A.X 为什么不是执行 A的静态构造函数? 如果不是 为什么不执行 Y = A.X;
刚发错帖浪费了20分。希望大哥大姐们解决下
为这问题花了60分了 55555

解决方案 »

  1.   

    如果我没表达清楚,
    帮我讲下过程就行了。
    谢谢另外有没高手留个msn
    方便问问问题
    以后每天发帖分给你 - -。
    非常感谢
      

  2.   

    我知道这些 - -。我想知道  第二时 执行的是什么? 是 Y = A.X; 还是 静态成员初始化语句 如果是 Y = A.X 为什么不是执行 A的静态构造函数? 如果不是 为什么不执行 Y = A.X; 
      

  3.   

    看来你要好好了解: http://www.cnblogs.com/star65225692/archive/2008/03/21/1117212.html
      

  4.   

    Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y); 
    首先访问的是类A,所以先对A的静态成员初始化然后调用A的静态成员.初始化A的静态成员X的时候,对其分配空间并给予X的类型的默认值0(int类型的默认值是0).然后执行X的初始化语句: X = B.Y;这时要访问类B来完成初始化.
    在执行 public static int Y = A.X; 时一样对Y分配空间并赋予值0.这里用到了类A的静态字段X,此时X=0(注意这时第2次调用X了),Y也为0,接着执行类B的静态构造函数,Y=1.此时X的初始化完成,执行A的静态构造函数.
      

  5.   

    我就是有困惑执行  int Y = A.X; 时  还没来得及 执行A的静态构造函数到步骤5时才执行  这样 第 2步     public static int Y = A.X; 时 调用A数据 说静态构造函数只执行一次  此时A的静态构造函数还没来得及执行呢 到底应该算作谁的??看了个总结    第一代码的执行顺序,代码在前的先执行;  第二静态成员初始化语句要先于静态构造函数执行;  第三静态成员初始化语句与静态构造函数只执行一次。
    是因为 第一代码的执行顺序,代码在前的先执行;这个吗? 
      

  6.   

     public static int Y = A.X; 时 调用A数据 说静态构造函数只执行一次  此时A的静态构造函数还没来得及执行呢 到底应该算作谁的?? 
    ----------------------------------------------
    此时A.X的初始化过程已经启动,只不过未完成而已,这里不会再去执行A的静态构造函数,直接取A.X的当前值。
    完成类B.Y的初始化,执行了B的静态构造函数后再返回,接下来才会执行A的静态构造函数。