新建和覆盖之间的区别是什么?

6

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

在我的继承类中,我想要做:

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

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

如何让我必须使用 override 关键字?

我使用 new 关键字和使用 override 有什么区别吗?


3
http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx - MPelletier
2个回答

7

这是因为您没有声明基本方法为virtual。一旦您这样做了,基本的virtual/派生的override关键字对将变得有意义。现在,编译器正在抱怨您无法overridevirtual方法。


3
只有 虚方法(virtual methods) 可以被覆盖重写。 - Matt Ball

4
使用override关键字时,即使实例作为基类类型传递,派生方法也会被调用。因此,基类中需要有一个虚拟函数,以便程序知道它必须运行时检查实例的实际类型。然后,它查找实际类型是什么,如果是派生类型,则检查在基类中该特定方法在派生类中是否存在覆盖。
成员隐藏是不同的。只有在实例作为派生类的实例传递时,基成员才会被隐藏。如果将对象作为基类传递,则仍将使用基类方法。如果隐藏成员,则如果没有使用new关键字,将会收到警告。new关键字仅是告诉编译器,你确实想要隐藏基础类型方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接