新的和覆盖之间的区别?
我有一个基类,我想为所有inheritance类的方法提供一些“基础”function。
在我想inheritance的inheritance类中:
public override void Setup() { base.Setup(); }
但目前它说我必须使用new关键字。
我怎么拥有它所以我必须使用override
关键字?
目前我使用new
关键字和使用override
有什么区别吗?
它是这样说的,因为你没有声明基本方法是virtual
。 执行此操作后,基本virtual
/派生override
关键字对将有意义。 现在,编译器抱怨你不能override
非virtual
方法。
使用override关键字时,即使实例作为基类类型传递,也会使用派生方法。 因此,基类中需要有一个虚拟,以便程序知道它必须对实例的实际类型进行运行时检查。 然后它查找实际类型是什么,如果它是派生类型,它检查它们是否是基类中该特定方法的派生类中的覆盖。
会员隐藏是不同的。 只有在实际作为派生类的实例传递时,才会隐藏基本成员。 如果对象作为基类传递,则仍将使用基类方法。 如果您隐藏某个成员,则在未使用该新关键字时会收到警告。 new关键字只是告诉编译器,你真的是要隐藏基类型方法。