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.   

    在new B()时程序会先调用 A 类的构造方法 ,及会去调用PrintFields()方法,该方法被B类重写的,所有第一次y是int的默认值0,所有输出x=1,y=0 。 第二次 y被赋值为-1,所有输出x=1 y=-1。
      

  2.   

    从类的构造顺序来讲,是先调用父类构造函数再到子类构造函数。所以开始输出的是x=1,y=0.(y的默认值为0)。但如果没有显示再调用B.printfields,是不可能输出x=1,y=-1.
    因为A构造的时候调用的还是B的pringfields.
    正确的输出就是x=1,y=0.