7

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

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

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

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

4

4 回答 4

6

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

于 2013-03-14T20:58:34.640 回答
6

不,它不能。您需要将方法显式标记为虚拟方法,以允许在派生类中覆盖它。

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

sealed 关键字用于类定义和方法。它不允许从类继承或覆盖方法。默认情况下,如果您不使用此关键字,其他人将能够从您的类继承。(MSDN 文档

于 2013-03-14T21:01:30.260 回答
2

不。与 Java 不同,C# 中的方法不是virtual默认的。它们都不是sealed,但你不能覆盖它们,因为它们是普通方法。

于 2013-03-14T20:59:10.543 回答
2

不,您不能覆盖非虚拟方法。new 关键字只隐藏了基类实现,并不是一个好的做法。

在此与 Anders Hejlsberg 讨论此问题

于 2013-03-14T21:00:56.190 回答