解構函式(C# 編程指南)

來源:互聯網
上載者:User

解構函式用於析構類的執行個體。

 備忘

  • 不能在結構中定義解構函式。只能對類使用解構函式。

  • 一個類只能有一個解構函式。

  • 無法繼承或重載解構函式。

  • 無法調用解構函式。它們是被自動調用的。

  • 解構函式既沒有修飾符,也沒有參數。

例如,下面是類 Car 的解構函式的聲明:

C# 複製代碼
class Car{~ Car()  // destructor{// cleanup statements...}}

該解構函式隱式地對對象的基類調用 Finalize。這樣,前面的解構函式代碼被隱式地轉換為以下代碼:

複製代碼
protected override void Finalize(){try{// Cleanup statements...}finally{base.Finalize();}}

這意味著對繼承鏈中的所有執行個體遞迴地調用 Finalize 方法(從派生程度最大的到派生程度最小的)。

說明:

不應使用空解構函式。如果類包含解構函式,Finalize 隊列中則會建立一個項。調用解構函式時,將調用記憶體回收行程來處理該隊列。如果解構函式為空白,只會導致不必要的效能損失。

程式員無法控制何時調用解構函式,因為這是由記憶體回收行程決定的。記憶體回收行程檢查是否存在應用程式不再使用的對象。如果記憶體回收行程認為某個對象符合析構,則調用解構函式(如果有)並回收用來儲存此對象的記憶體。程式退出時也會調用解構函式。

可以通過調用 Collect 強制進行記憶體回收,但大多數情況下應避免這樣做,因為這樣會導致效能問題。

 使用解構函式釋放資源

通常,與運行時不進行記憶體回收的開發語言相比,C# 無需太多的記憶體管理。這是因為 .NET Framework 記憶體回收行程會隱式地管理對象的記憶體配置和釋放。但是,當應用程式封裝視窗、檔案和網路連接這類非託管資源時,應當使用解構函式釋放這些資源。當對象符合析構時,記憶體回收行程將運行對象的 Finalize 方法。

 資源的顯式釋放

如果您的應用程式在使用昂貴的外部資源,我們還建議您提供一種在記憶體回收行程釋放對象前顯式地釋放資源的方式。可通過實現來自 IDisposable 介面的 Dispose 方法來完成這一點,該方法為對象執行必要的清理。這樣可大大提高應用程式的效能。即使有這種對資源的顯式控制,解構函式也是一種保護措施,可用來在對 Dispose 方法的調用失敗時清理資源。

有關清理資源的更多詳細資料,請參見下列主題:

  • 清理非託管資源

  • 實現 Dispose 方法

  • using 語句(C# 參考)

 樣本

下面的樣本建立三個類,這三個類構成了一個繼承鏈。類 First 是基類,Second 是從 First 派生的,而 Third 是從 Second 派生的。這三個類都有解構函式。在 Main() 中,建立了派生程度最大的類的執行個體。注意:程式運行時,這三個類的解構函式將自動被調用,並且是按照從派生程度最大的到派生程度最小的次序調用。

C# 複製代碼
class First{~First(){System.Console.WriteLine("First's destructor is called");}}class Second: First{~Second(){System.Console.WriteLine("Second's destructor is called");}}class Third: Second{~Third(){System.Console.WriteLine("Third's destructor is called");}}class TestDestructors{static void Main(){Third t = new Third();}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.