在如下代码所示的方法签名中,是否始终需要在sealed关键字后面加上override:
public sealed override string Method1(){.....}我的意思是,如果我想在不覆盖的情况下“密封”基类中的方法,override关键字仍然是必要的吗?
发布于 2012-12-13 19:00:16
这里发生的情况如下:
您正在重写基类(override)中的方法,并告诉编译器不再允许从您的类派生的类重写此方法(sealed)。
如果该方法是您在类中声明的新方法,并且您希望防止派生类覆盖它,则简单地不要将其声明为virtual。
如果方法是在基类中声明的,但不是可重写的密封,这将没有任何意义,因为它已经不能被重写。
发布于 2012-12-13 19:00:05
您只能封存覆盖,所以我猜答案是肯定的。
发布于 2020-05-04 02:06:48
嗯,从技术上讲这是可能的……然而,解决方案在我的选择中有点脏。
想象一下有一个类A (在您的代码库或外部库中):
public class A
{
public virtual void M () { /* implementation */ }
}您可以按如下方式定义一个(抽象)类B : A:
public class B : A
{
public sealed override void M() => base.M();
}任何类C : B都不能覆盖A.M,因为您已经密封了该方法(即使您没有进行任何语义更改)。
https://stackoverflow.com/questions/13858384
复制相似问题