我有一个基类,我想为所有继承类的方法提供一些“基础”功能。新建与覆盖之间的区别?
在我的继承类我想做的事:
public override void Setup()
{
base.Setup();
}
但此刻它说我必须使用new关键字。
如何获得它我必须使用override
关键字?
与我使用关键词new
和使用override
的方式有什么不同?
我有一个基类,我想为所有继承类的方法提供一些“基础”功能。新建与覆盖之间的区别?
在我的继承类我想做的事:
public override void Setup()
{
base.Setup();
}
但此刻它说我必须使用new关键字。
如何获得它我必须使用override
关键字?
与我使用关键词new
和使用override
的方式有什么不同?
这是这么说的,因为您还没有声明基本方法virtual
。一旦你这样做了,基地virtual
/派生override
双关键字将是有道理的。目前,编译器正在抱怨说您不能使用override
的非virtual
方法。
...只有虚拟的方法可以被覆盖。 –
当您使用override关键字时,即使实例作为基类类型传递,也会使用派生方法。因此,需要在基类中有一个虚拟的,以便程序知道它必须对实例的实际类型进行运行时检查。然后它查找实际类型是什么,如果它是派生类型,它会检查它们是否是基类中特定方法的派生类中的重写。
成员隐藏是不同的。如果基本成员实际上是作为派生类的实例传递的,则它将仅被隐藏。如果该对象作为基类传递,则仍将使用基类方法。如果您隐藏了会员,如果您没有使用新的关键字,则会收到警告。新的关键字仅仅是告诉编译器,你确实的意思是隐藏基类型方法。
http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier
[C#关键字使用情况virtual + override vs. new](http:// stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier
感谢这是一个伟大的链接 – Blankman