簡體   English   中英

覆蓋密封有效,但為什么不在C#中進行虛擬密封?

[英]Override Sealed is valid but why not Virtual Sealed in C#?

以下代碼段有效

public class BaseClass
{

   public virtual void Display()
   {
      Console.WriteLine("Virtual method");
   }
 }

public class DerivedClass : BaseClass
{

  public override sealed void Display()
  {
       Console.WriteLine("Sealed method");
  }

}

但為什么不呢

public class BaseClass
{

 public virtual sealed void Display()
 {
          Console.WriteLine("Virtual method");
 }
}

編輯

其實我正在閱讀什么是密封類和密封方法? 本文。 所以我按照作者的指示。 突然,我試着用基類來演奏Sealed的概念。 這就是我提出這個問題的原因。

override sealed是有效的,因為它說“我正在覆蓋基類方法,但派生類不能覆蓋我。” 那講得通。 其中一部分是談論與基類的關系; 另一個是談論派生類的關系。

virtual sealed將說“你可以覆蓋我( virtual ),但你不能覆蓋我( sealed )。” 這是沒有意義的。 這兩個修飾語是矛盾的適用於相同的關系。

密封:

您還可以在覆蓋基類中的虛方法或屬性的方法或屬性上使用sealed修飾符。 這使您可以允許類派生自類,並防止它們覆蓋特定的虛擬方法或屬性。

覆蓋:

override修飾符是擴展或修改繼承方法,屬性,索引器或事件的抽象或虛擬實現所必需的。

Sealed意味着它是給定方法/類的“層次結束”。 使virtual方法只是說“這是默認行為,如果你想要不同的行為,請覆蓋我並且sealed意味着“這不能被覆蓋”是一個悖論。

我不確定你甚至會怎么想。

sealed關鍵字表示您無法繼承它。

您還可以在覆蓋基類中的虛方法或屬性的方法或屬性上使用sealed修飾符。 這使您可以允許類派生自類,並防止它們覆蓋特定的虛擬方法或屬性。

virtual關鍵字意味着你可以。

virtual關鍵字用於修改方法,屬性,索引器或事件聲明,並允許在派生類中重寫它。 例如,任何繼承它的類都可以覆蓋此方法:

我不確定你為什么需要或想要兩者。

將它應用於override ,這是有道理的。 這意味着“您無法覆蓋此行為”,並且有效地取代了方法或屬性上的先前(相對於層次結構) virtual關鍵字。

暫無
暫無

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

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