新的和覆盖之间的区别?

时间:2011-09-24 22:09:13

标签: c# override

我有一个基类,我想为所有继承类的方法提供一些“基础”功能。

在我想要做的继承课程中:

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

但目前它说我必须使用新关键字。

如何使用,所以我必须使用override关键字?

目前使用new关键字并使用override与我之间有何不同?

2 个答案:

答案 0 :(得分:7)

它是这样说的,因为你没有声明基本方法virtual。完成此操作后,基本virtual /派生override对关键字将有意义。目前,编译器抱怨您不能override使用非virtual方法。

答案 1 :(得分:4)

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

会员隐藏是不同的。只有在实际作为派生类的实例传递时,才会隐藏基本成员。如果对象作为基类传递,则仍将使用基类方法。如果您隐藏了某个成员,则在未使用该新关键字时会收到警告。新关键字只是告诉编译器,你真的应该隐藏基类型方法。