请问各位高手,为什么下面的程序输出为:
x=1,y=0
x=1,y =-1 
程序:
using System; 
class A 

public A() 

PrintFields(); 

public virtual void PrintFields(){} 
}
class B : A
{
    int x = 1;
    int y;
    public B()
    {
        y = -1;
    }
    public override void PrintFields()
    {
        Console.WriteLine("x={0},y={1}", x, y);
    }
    public static void Main()
    {
        B b = new B();
        b.PrintFields();
        Console.Read();
    }
}

解决方案 »

  1.   


    执行的时候int   x   =   1; 
    int   y; 这时候y是0然后调用A的构造函数,里面调用了PrintFields,所以打出来的就是1, 0然后调用B的构造函数,这时候就把y变成-1了,再调用PrintFields,所以打出来的就是1, -1
      

  2.   

    B   b= new B(); 
    b.PrintFields(); 
    ---------------------
    第一行代码:
       由于B派生自A,所以先执行A的构造函数,此时x=1,y虽然没有赋值,但会自动初始化为0,执行PrintFields,会输出x=1,y=0.然后再执行B的构造函数,将y赋值为-1.
    第二行代码:
       执行PrintFields,此时y的值已经是-1了,所以输出x=1,y=-1