我们可以在类中声明密封方法吗?

本文关键字:密封 方法 声明 我们 | 更新日期: 2023-09-27 18:35:13

class X {
    sealed protected virtual void F() {
        Console.WriteLine("X.F");
    }
    sealed void F1();
    protected virtual void F2() {
        Console.WriteLine("X.F2");
    }
}

在上面的代码中存在编译时错误:

X.F()' 无法密封,因为它不是覆盖

X.F1()' 无法密封,因为它不是覆盖

这是否意味着我们只能应用sealed关键字乳清,我们必须覆盖某些方法?

我们可以在类中声明密封方法吗?

好吧,密封关键字可以防止方法被覆盖,这就是为什么它不会起作用的原因

  1. 使用虚拟声明 - 只需删除virtual而不是声明virtual sealed.
  2. 在抽象方法
  3. 上,因为必须重写抽象方法
  4. 非虚拟方法上,因为这些方法不能被覆盖

所以唯一的选择是override sealed这意味着覆盖,但最后一次

public class A {
  public virtual void SomeMethod() {;}
  public virtual void SomeOtherMethod() {;}
}
public class B: A {
  // Do not override this method any more
  public override sealed void SomeMethod() {;}
  public override void SomeOtherMethod() {;}
}
public class C: B {
  // You can't override SomeMethod, since it declared as "sealed" in the base class
  // public override void SomeMethod() {;}
  // But you can override SomeOtherMethod() if you want
  public override void SomeOtherMethod() {;}
}