首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与override关联的Sealed关键字

与override关联的Sealed关键字
EN

Stack Overflow用户
提问于 2012-12-13 18:58:39
回答 3查看 10.5K关注 0票数 26

在如下代码所示的方法签名中,是否始终需要在sealed关键字后面加上override

代码语言:javascript
复制
public sealed override string Method1(){.....}

我的意思是,如果我想在不覆盖的情况下“密封”基类中的方法,override关键字仍然是必要的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-13 19:00:16

这里发生的情况如下:

您正在重写基类(override)中的方法,并告诉编译器不再允许从您的类派生的类重写此方法(sealed)。

如果该方法是您在类中声明的新方法,并且您希望防止派生类覆盖它,则简单地不要将其声明为virtual。

如果方法是在基类中声明的,但不是可重写的密封,这将没有任何意义,因为它已经不能被重写。

票数 46
EN

Stack Overflow用户

发布于 2012-12-13 19:00:05

您只能封存覆盖,所以我猜答案是肯定的。

票数 1
EN

Stack Overflow用户

发布于 2020-05-04 02:06:48

嗯,从技术上讲这是可能的……然而,解决方案在我的选择中有点脏。

想象一下有一个类A (在您的代码库或外部库中):

代码语言:javascript
复制
public class A
{
    public virtual void M () { /* implementation */ }
}

您可以按如下方式定义一个(抽象)类B : A

代码语言:javascript
复制
public class B : A
{
    public sealed override void M() => base.M();
}

任何类C : B都不能覆盖A.M,因为您已经密封了该方法(即使您没有进行任何语义更改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13858384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档