你要知道 new  和 override 区别。
override是重写基类方法,而new 是隐藏基类方法(基类方法不必是virtual),但仍然可以调用基类方法。通过(如你文中) MyBase mB = (MyBase) mD就可以成功调用基类方法了。但override 不同,你不能再掉用父类方法。这是new 和override区别

解决方案 »

  1.   

    补充:MyBase mB=mD,这就是一次派生类对象的一次重塑。派生类对象被重塑 到一个基类。这时,ovrriede ,new 的区别,就如你看到的那样!
      

  2.   

    《c#高级编程》但是new
    关键字是用来隐藏父类的方法的,
    ==这里的意思是你将在子类中不能用BASE。*调用父类方法了但是在这里它怎么没有隐藏父类的方法反而使用父类的方法 ??????
    因为你虽然创建了子类对象,但将他的类型转换成了父,根据多态的表现,只有你的子类用了OVERRIDE才会执行子类的方法,否则,他将执行父类的方法还有说明了派生类的对象只有在被父类重塑的时候,override和new关键字才会生效这里的意思是说只有创建子类对象,却赋给父类类型时,多态和隐藏才有意义,不然你创建一个CLASS1 A = NEW CLASS1,他没有必要进行多态的转换,因为他自己创建自己的类型
      

  3.   

    这个很容易理解嘛!
    new 就是告诉这个派生类,只有在派生类中才有效,如果你将他"重塑"(我不喜欢这个词,习惯叫强制转换,呵呵~)为父类时,new的方法就无效了,一定是用父类的方法.
    override则定义为,即使"重塑"为父类也是有效的.
      

  4.   

    这就是所谓的上溯造型,在继承类中利用new 关键字隐藏了父类中的同名方法后,以后对于这个方法
    的调用就取决于"对象引用的类型",而不是"对象本身的类型"。
     
    BaseClassclass    = new DerivedClass()
    /*对象引用的类型*/       /*对象本身的类型*/
     
    而override的意思是在子类中重新实现父类中的同名虚方法,不管以后引用是什么类型,只要对象
    是子类的对象,就会调用重新实现过的方法,要不然重新实现还有什么意义啊?是吧?