我不太懂为什么会输出这个结果.帮忙解释一下啊.
12.在下面的例子里 
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); 

当使用new B()创建B的实例时,产生什么输出? 
答:X=1,Y=0;x= 1 y = -1 

解决方案 »

  1.   

    先实例化父类,再实例化子类,
    实例化父类时调用了PrintFields方法,此时y取默认值0
    实例化子类时,y被初始化为1,一共输出两次
      

  2.   

    有继承关系时,执行顺序如下~子类的静态成员初始化语句 
    子类的静态构造函数 
    子类的非静态成员初始化语句 
    父类的静态成员初始化语句 
    父类的静态构造函数 
    父类的非静态成员初始化语句  
    父类的构造函数 
    子类的构造函数当new B()时,A的构造函数中的PrintFields()方法被执行~~此方法在B中被override了~这时,还未执行B的构造函数,所以,x和y都是初始化时候的值~即:X=1,Y=0