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.ReadLine ();
}
}
运行结果是,x=1,y=2;为什么,我越看越糊涂,说清楚点啊最好带上运行步骤啊

解决方案 »

  1.   

    static A(){
    X=B.Y+1;
    }
    X=B.Y+1; ->  B.Y=0,X=0+1;static B(){}
    static void Main(){
    Console.WriteLine("X={0},Y={1}",A.X,B.Y);   -> A.Y=1,public static int Y=A.X+1;
    啊... 不知道回答对没
      

  2.   

    最好的办法是用Reflector看IL源码
      

  3.   

    你的代码等价于下列代码,.cctor是类构造函数。1、CLR保证从托管堆分配对象时清零。
    2、类构造函数只运行一次,就在首次用到该类的时候。
    3、B的.cctor先执行(记住执行前B.X已被清零)这样你能理解了吗?
    using System;
    class A
    {
     public static int X;
     static .cctor(){
      X=B.Y+1;
     }
    }class B
    {
     public static int Y;
     static .cctor(){
      Y==A.X+1;
     }
     static void Main(){
      Console.WriteLine("X={0},Y={1}",A.X,B.Y);
      Console.ReadLine ();
     }
    }
      

  4.   

    我这运行的结果是X=2,Y=1啊?!测试一下先    class A
        {
            public static int X;        static A()
            {
                X = B.Y + 1;
            }
        }   class B
        {
            public static int Y = A.X + 1;        static B()
            {
            }
        }    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("x={0},y={1}", A.X, B.Y);
                Console.Read();
            }
        }
      

  5.   


    那是给你阅读和分析的,不使用来运行的 :-)楼主的代码中,程序入口点static void Main()写在class B中。
    要调用入口点就需要B类型,所以B的类构造执行在先。而在你的代码中,程序入口点在class Program中。
    而调用Console.WriteLine("x={0},y={1}", A.X, B.Y);的时候,
    由于A.X出现在前,所以A的类构造执行在先。这就是结果不一样的原因。