簡體   English   中英

我們可以在類中聲明密封方法嗎

[英]Can we declare sealed method in a class

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

在上面的代碼中有編譯時錯誤:

XF()'不能密封,因為它不是替代

X.F1()'無法密封,因為它不是替代

這是否意味着我們只能應用必須重寫某些方法的sealed關鍵字whey?

好吧, 密封關鍵字防止方法被覆蓋 ,這就是為什么它沒有意義

  1. 使用虛擬聲明-只需刪除virtual而不是聲明virtual sealed
  2. 抽象方法上,因為必須重寫抽象方法
  3. 非虛擬方法上,因為這些方法無法被覆蓋

因此,唯一的選擇是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() {;}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM