默认情况下,C#方法是密封的还是虚拟的?

默认情况下,C#方法是密封的还是虚拟的?,c#,inheritance,C#,Inheritance,我知道virtual和sealed关键字的定义,但是如果您没有将它们中的任何一个与方法一起使用,那么默认情况下是否可以覆盖该方法 我来自vb.net背景。在vb.net中是这样的(来自MSDN): 如果未指定可重写或不可重写修饰符,则 默认设置取决于属性或方法是否重写 基类属性或方法。如果属性或方法重写 基类属性或方法,默认设置是可重写的; 否则,它是无法克服的 我只是想知道在C#中是否也是这样。默认情况下,C#中的方法不是虚拟的。不。与Java不同,在C#中,默认情况下方法不是虚拟的。它们都不

我知道
virtual
sealed
关键字的定义,但是如果您没有将它们中的任何一个与方法一起使用,那么默认情况下是否可以覆盖该方法

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

如果未指定可重写或不可重写修饰符,则 默认设置取决于属性或方法是否重写 基类属性或方法。如果属性或方法重写 基类属性或方法,默认设置是可重写的; 否则,它是无法克服的


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

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

不。与Java不同,在C#中,默认情况下方法不是虚拟的。它们都不是密封的,但是您不能重写它们,因为它们是普通方法。

否,您不能重写非虚拟方法。new关键字只隐藏基类实现,这不是一个好的实践


与Anders Hejlsberg就此进行讨论

不,这是不可能的。您需要显式地将方法标记为virtual,以允许在派生类中重写它

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


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

最快的方法就是检查你自己,检查的代码不超过10行。@我不同意。谷歌更快。有人问了这个问题,这让我可以用谷歌搜索fastnote
sealed
应用于方法和类。您可以密封虚拟方法以防止您自己的子类型重写它。只需添加
new
关键字,该关键字对于派生类中的方法是隐式的,该派生类以虚拟方法或非虚拟方法的形式存在于基类中。在派生类中的方法声明中明确提到
new
关键字有助于程序员理解-
您正在查看的方法对参与继承调用层次结构不感兴趣的意图。