簡體   English   中英

與 override 關聯的密封關鍵字

[英]Sealed keyword in association with override

是否總是需要在如下代碼的方法簽名中跟隨sealed關鍵字和override

public sealed override string Method1(){.....}

我的意思是,如果我想在基類中“密封”方法而不覆蓋,是否仍然需要override關鍵字?

密封一個方法只有在你覆蓋它時才有意義。

這里發生的事情如下:
您正在覆蓋基類中的方法 ( override ) 並告訴編譯器不再允許從您的類派生的類覆蓋此方法 ( sealed )。

如果該方法是您在您的類中聲明的新方法,並且您希望防止派生類覆蓋它,則不要將其聲明為虛擬方法。

如果該方法是在基類中聲明的,但不是可覆蓋密封的,那么它就沒有任何意義,因為它已經無法被覆蓋。

我認為 Hilgarth 先生在這里提供了最好的答案,但只是為了為以前有Java背景的程序員(比如我自己)添加一些新內容,我認為大多數 C# 新手,傾向於混淆sealedfinal in Java壓倒一切。

be in its derived classes.Java中,不指定"any"修飾符的默認行為是該方法在其派生類中被

be unless explicitly specified using the virtual keyword.而在C#中,默認行為是除非使用virtual關鍵字明確指定,否則該方法。

希望這有助於補充上面的最佳答案。

是否總是需要在方法的簽名中使用override跟隨sealed關鍵字,如下面的代碼:

public sealed override string Method1(){.....}

我的意思是,如果我想在不覆蓋的情況下“密封”基類中的方法,是否仍然需要override關鍵字?

好吧,這在技術上是可能的……但是,我的選擇是解決方案有點臟。

想象一下有一個A類(在您的代碼庫或外部庫中):

public class A
{
    public virtual void M () { /* implementation */ }
}

您可以定義一個(抽象)類B: A ,如下所示:

public class B : A
{
    public sealed override void M() => base.M();
}

任何類C: B都無法覆蓋AM ,因為您已經密封了該方法(即使您沒有進行任何語義更改)。

暫無
暫無

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

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