只有一条输出Console.WriteLine("x={0},y={1}",x,y);输出2个值怎么可能有第三个值呢?lz没copy错代码吧?

解决方案 »

  1.   

    您的意思是后一个答案对吗?
    是不是实例化时,只走构造函数,B中的public override void PrintFields()是不运行的,对吗??
      

  2.   

    构造函数次序,先执行B中成员字段,再A的构造函数,最后执行B的。当执行A构造函数时掉用PrintFields,因为在B中override了,调用B的PrintFields函数。
      

  3.   

    override覆盖了原来的方法,那实例化B时,A的构造函数调用了它,走B时还调用吗?调用了几次?我觉得是1次呢?明白了马上给分,结贴,谢了!
      

  4.   

    记住一句话:“重写看(调)对象”
    这是我的老师说的,哈哈!比如:
    Class B : A
    A object = new B();
    object.PrintString();
    (PrintString() A、B里都有)
    如果PrintString()在B中被override过了,就调用B里的方法。否则,会调用A中的方法。不管是谁引用,只要该对象的(被调)方法被override过,肯定是调用对象的方法。
    而调用没有被override过的方法时,会调用引用类型的方法。要想更明白的话,可以在new那里价格端点,一步一步执行,看看过程可能更容易理解。祝你好运!
      

  5.   

    在你发的代码new B() 那里加断点。
      

  6.   

    press F11 To run step by step!
      

  7.   

    我知道大家的意思,我也加了断点走了!可能大家没十分理解我的意思,我是说实例化B时,是指A ss=new B()还是指A ss=new B();ss.PrintString();
    只说实例化时还要ss.PrintString();吗?是不是问的有点弱智,但是我就是不明白,谢谢了!
      

  8.   

    因为在你的代码中PrintFields()方法已经被Override的了,所以调那个方法,完全取决于new的对象,既然是new B(),那么不管前面引用的是A或B结果是一样的,只会调B里的方法。
      

  9.   

    网上的答案是4个,是因为说的是2句话的运行结果,new B() ,因为A的构造函数调用了Print,所以执行一次,ss.print,又执行一次,一共2次实例化B,指的仅仅是A ss = new B() 这一句,确实只执行了一次print