C#中sealed關鍵字的作用詳解

來源:互聯網
上載者:User
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.