C#方法默认是密封还是虚拟?

时间:2013-03-14 20:57:06

标签: c# inheritance

我知道virtualsealed个关键字的定义,但如果您不使用其中任何一个方法,默认情况下是否可以覆盖该方法?

我来自vb.net背景。它在vb.net中是这样的(来自MSDN):

  

如果未指定Overridable或NotOverridable修饰符,则为   默认设置取决于属性或方法是否覆盖a   基类属性或方法。如果属性或方法覆盖了   基类属性或方法,默认设置为Overridable;   否则,它是NotOverridable。

我只是想知道在C#中是否也是如此。

4 个答案:

答案 0 :(得分:6)

默认情况下,C#中的方法虚拟。

答案 1 :(得分:5)

不,不能。您需要将方法明确标记为虚拟,以允许在派生类中重写它。

但是,您可以使用new关键字隐藏方法。 (MSDN文档)

sealed关键字用于类定义和方法。它不允许从类继承或覆盖方法。默认情况下,如果您不使用此关键字,则其他人可以从您的班级继承。 (MSDN Documentation

答案 2 :(得分:2)

没有。与Java不同,C#方法默认不是virtual。它们都不是sealed,但你不能覆盖它们,因为它们是正常的方法。

答案 3 :(得分:2)

不,您无法覆盖非虚方法。 new关键字只隐藏基类实现,不是一个好习惯。

与Anders Hejlsberg进行讨论here