sealed的中文意思是密封,故名思義,就是由它修飾的類別或方法將不能被繼承或是重寫。
sealed關鍵字的作用:
在類別聲明中使用sealed可防止其它類別繼承此類;在方法聲明中使用sealed修飾符可防止擴充類別重寫此方法。
sealed修飾符主要用於防止非有意的派生,但是它還能促使某些運行時優化。具體來說來,由於密封類別永遠不會有任何衍生類,因此對密封類別的實例的虛擬函數成員的呼叫可以轉換為非虛擬呼叫來處理。
密封類別:
密封類別在宣告中使用sealed 修飾符,這樣就可以防止該類別被其它類別繼承。如果試圖將密封類別作為其它類別的基類,C#將提示出錯。理所當然,密封類別不能同時又是抽象類,因為抽象總是希望被繼承的。
在哪些場合下使用密封類別呢?實際上,密封類別中不可能有衍生類別。如果密封類別實例中存在虛成員函數,則該成員函數可以轉換為非虛的,函數修飾符virtual 不再生效。
讓我們看下面的範例:
abstract class AbstractClass { public abstract void Method( ) ; } sealed class SealedClass: AbstractClass { public override void Method( ) { //... } }
如果我們試著寫下面的程式碼
class OtherClass: SealedClass
{
}
C#會指出這個錯誤,告訴你SealedClass 是個密封類,不能試圖從SealedClass 中派生任何類別。
密封方法:
C#也提出了密封方法(sealedmethod) 的概念,以防止在方法所在類別的衍生類別中對該方法的重載。對方法可以使用sealed 修飾符,這時我們稱該方法為密封方法。
不是類別的每個成員方法都可以作為密封方法密封方法,要作為密封方法必須對基類的虛方法進行重載,提供具體的實作方法。所以,在方法的宣告中,sealed 修飾符總是和override 修飾符同時使用。請看下面的範例程式碼:
using System ; class A { public virtual void F( ) { Console.WriteLine("A.F") ; } public virtual void G( ) { Console.WriteLine("A.G") ; } } class B: A { sealed override public void F( ) { Console.WriteLine("B.F") ; } override public void G( ) { Console.WriteLine("B.G") ; } } class C: B { override public void G( ) { Console.WriteLine("C.G") ; } }
類別B 對基底類別A 中的兩個虛擬方法均進行了重載,其中F 方法使用了sealed 修飾符,成為一個密封方法。 G 方法不是密封方法,所以在B 的衍生類別C 中,可以重載方法G,但不能重載方法F
以上是C#中sealed關鍵字的作用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!