程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#析構函數與垃圾回收

C#析構函數與垃圾回收

編輯:C#基礎知識

析構函數基本語法

C#
class Car
{
    ~ Car()  // destructor
    {
        // cleanup statements...
    }
}

析構函數說明

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

  • 一個類只能有一個析構函數。

  • 無法繼承或重載析構函數。

  • 無法調用析構函數。它們是被自動調用的。

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

  • 析構函數跟構造函數相反 構造函數可控制執行 析構函數不可控制

 

托管資源和非托管資源

托管資源指的是.NET可以自動進行回收的資源,主要是指托管堆上分配的內存資源。托管資源的回收工作是不需要人工干預的,有.NET運行庫在合適調用垃圾回收器進行回收。

         非托管資源指的是.NET不知道如何回收的資源,最常見的一類非托管資源是包裝操作系統資源的對象,例如文件,窗口,網絡連接,數據庫連接,畫刷,圖標等。這類資源,垃圾回收器在清理的時候會調用Object.Finalize()方法。默認情況下,方法是空的,對於非托管對象,需要在此方法中編寫回收非托管資源的代碼,以便垃圾回收器正確回收資源。

         在.NET中,Object.Finalize()方法是無法重載的,編譯器是根據類的析構函數來自動生成Object.Finalize()方法的,所以對於包含非托管資源的類,可以將釋放非托管資源的代碼放在析構函數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved