2011-09-24 41 views
6

我有一个基类,我想为所有继承类的方法提供一些“基础”功能。新建与覆盖之间的区别?

在我的继承类我想做的事:

public override void Setup() 
{ 
    base.Setup(); 
} 

但此刻它说我必须使用new关键字。

如何获得它我必须使用override关键字?

与我使用关键词new和使用override的方式有什么不同?

+3

http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier

+1

[C#关键字使用情况virtual + override vs. new](http:// stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier

+0

感谢这是一个伟大的链接 – Blankman

回答

7

这是这么说的,因为您还没有声明基本方法virtual。一旦你这样做了,基地virtual /派生override双关键字将是有道理的。目前,编译器正在抱怨说您不能使用override的非virtual方法。

+3

...只有虚拟的方法可以被覆盖。 –

4

当您使用override关键字时,即使实例作为基类类型传递,也会使用派生方法。因此,需要在基类中有一个虚拟的,以便程序知道它必须对实例的实际类型进行运行时检查。然后它查找实际类型是什么,如果它是派生类型,它会检查它们是否是基类中特定方法的派生类中的重写。

成员隐藏是不同的。如果基本成员实际上是作为派生类的实例传递的,则它将仅被隐藏。如果该对象作为基类传递,则仍将使用基类方法。如果您隐藏了会员,如果您没有使用新的关键字,则会收到警告。新的关键字仅仅是告诉编译器,你确实的意思是隐藏基类型方法。

相关问题