using System;
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("{0}, {1}", A.X, B.Y);
    }
}结果是1,2

解决方案 »

  1.   

    就是觉得怪怪的,class b还没初始完,b.y就在外面被使用了
    static A() 
        { 
            X = B.Y + 1; 
        } 
      

  2.   

    0+1 = 1
     
    1+1=2就这么简单,static
      

  3.   

    CLASS B 在加载CLR的时候就已经被初始化了
      

  4.   

    静态变量不需要实例化,申明的时候就已经赋值(例如int型为0,bool型为false等)
      

  5.   

        class A
        {
            public static int X;//静态成员在第一次被访问之前并且在调用静态构造函数(如有存在)之前进行初始化。
            static A()
            {
                //静态构造函数用于初始化任何静态数据,
                //或用于执行仅需执行一次的特定操作。
                //在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。 
                X = B.Y + 1;//第二步,B.Y=0,执行完后X=1
            }
        }
        class B
        {
            public static int Y = A.X + 1;//第一步,A.X=0,执行完后Y=2
            static B() { }
            static void Main()
            {
                Console.WriteLine("{0}, {1}", A.X, B.Y);
            }
        }
      

  6.   

    你自己单步执行看看,主要是用了静态成员和静态构造函数    class A
        {
            public static int X;//静态成员在第一次被访问之前并且在调用静态构造函数(如有存在)之前进行初始化。
            static A()
            {
                //静态构造函数用于初始化任何静态数据,
                //或用于执行仅需执行一次的特定操作。
                //在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。 
                X = B.Y + 1;//第二步,执行前B.Y=0,X=0;,执行后B.Y=0,X=1
            }
        }
        class B
        {
            public static int Y = A.X + 1;//第一步,执行前A.X=0,Y=0;执行完后A.X=1,Y=2
            static B() { }
            static void Main()
            {
                Console.WriteLine("{0}, {1}", A.X, B.Y);
            }
        }
      

  7.   

    public static int Y = A.X + 1;
    LZ你可以自己试下:如果Y= B.某变量 + 1;的话在CLASS A内X = B.Y + 1时 B。Y就会计算B.某变量 + 1的值了
                      如果Y= B.某变量 + 1;如果是非B的话就是X = B.Y + 1时B.Y就不计算直接等于0了。。