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.   

    先构造父类的构造函数,然后再构造子类的构造函数PS:为啥会输出两遍?new B()又没调用PrintFields() 
      

  2.   

    B继承A,这里最主要是执行的顺序,先执行A,再执行B,还有B中重写了A的PrintFields方法
      

  3.   

    因为Class B是继承Class A,首先要实例Class A,调用A.PrintFields()输出X=1,Y=0;
    再实例Class B,调用A.PrintFields()输出X=1,Y=-1;
      

  4.   

    b继承与a b对象实例话的时候会先调用 基类的构造函数public A() { PrintFields()}; 所以输出X=1,Y=0 ;(y是int型 只定义未付值 默认的值是0) 然后调用自身的构造函数 再调用PrintFields()  输出x= 1 y = -1
             
      

  5.   

    答案是错误的,
    创建B的实例只会输出 x=1,y=0;
    再调用B的实例的PrintFields方法才会输出 x=1,y=-1至于原因,上面的都已经解释过了。
      

  6.   

    我试验过了,按照楼主的程序,只输出x=1,y=0一组结果,如果输出第二组结果的话,B的构造函数中y=-1;后面还应该写Console.WriteLine("x={0},y={1}", x, y);才可以。第一组结果是调用A的构造函数,第二组结果是调用B的构造函数
      

  7.   

    楼上几乎都是正解...
    我也有个小问题想问一下...
    实例化孩子的时候...必须要执行父亲的构造函数...
    也就是执行了PrintFields()方法...
    不过我为什么执行的是重写后的方法呢?
      

  8.   

    以前有人发过这个帖子,自己写到IDE里编译执行不久知道了正确答案x=1 y=0
      

  9.   

    LZ我来告诉你吧不要管别人怎么说的自己把这个例子写进C#后台然后找个LABLE输出X和Y的值调试的时候加断点单步调试自己做一遍就知道怎么回事了听别人的也是一头雾水