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);
}
答:X=1,Y=0
y=0想不明白......

解决方案 »

  1.   

    在A的构造时还没有构造B
    new B()顺序上先A构造,再构造B
    所以0啦
    你可以在每个构造和方法中放置Console.WriteLine来观察顺序
      

  2.   

    再说一句,这个和override无关,只和继承有关
      

  3.   

    先调动A的构造函数,执行PrintFields()方法,而PrintFields是虚方法,实际上执行的是B的PrintFields方法。Y没有初始值,所以为0.
    不知道是不是对的。。
      

  4.   

    因为 Y没有初始值 ,所以在调用的时候默认构造函数的时候,系统会 给其属性 赋上 初始值:整型 是0 bool类型默认值是 false ...... string 默认值是 null .....等等。
      

  5.   

    创建B的对象的时候要首先执行
    int x=1;
    int y;
    然后调用构造函数,调用构造函数先调用父类构造函数
    执行PrintFields(); 因为PrintFields是虚方法,执行的B的PrintFields方法
    这时候y还没有赋值,用int默认值0
      

  6.   

    在做Public B()之前调用的A的构造函数