析構函數用于在類銷毀之前釋放類實例所使用的托管和非托管資源。對于C#應用程序所創建的大多數對象,可以依靠.NET Framework的垃圾回收器(GC)來隱式地執行內存管理任務。但若創建封裝了非托管資源對象,在應用程序使用完這些非托管資源之后,垃圾回收器將運行對象的析構函數(即Finalize方法)來釋放這些資源。
.NET Framework的垃圾回收器機制,GC能夠自動的幫助我們釋放資源。但我們一般不去手動的調用GC幫助我們回收,而是由程序自動的使用GC去回收資源。但有可能程序結束的時候,GC沒有馬上幫助我們去釋放資源,如果你想讓資源馬上被釋放的時候,就可以使用析構函數。
香蕉视频app析構函數作用:幫助我們釋放資源。當程序結束,你想讓資源馬上被釋放的時候,就可以使用析構函數,如果你不使用析構函數的話,那么就由垃圾回收器來自動幫助我們釋放資源。析構函數則是在垃圾回收、釋放資源時使用的。
程序員無法控制何時調用析構函數,因為這是由垃圾回收器決定的。 垃圾回收器檢查是否存在應用程序不再使用的對象,如果垃圾回收器認為某個對象符合析構,則調用析構函數,并回收用來存儲此對象的內存。 程序退出時也會調用析構函數。即當對象脫離其作用域時(例:對象所在的函數已調用完畢),系統自動執行析構函數。
如果用戶沒有編寫析構函數,C#編譯器會自動生成一個缺省的析構函數,它也不進行任何操作。所以許多簡單的類中沒有用顯式的析構函數。
定義析構函數的語法:
~類名()
{
語句塊;
}
定義析構函數時需要注意以下幾點:
1、只能對類使用析構函數,不能在結構體中定義析構函數。
2、一個類只能有一個析構函數。
3、無法繼承或重載析構函數。
香蕉视频app4、析構函數不允許有修飾符和參數。
5、無法顯式地調用析構函數,因為析構函數是有垃圾回收器自動調用的。
代碼示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp { class Person { ~Person() //析構函數 { Console.WriteLine("小老弟,我是析構函數啊!我被調用了!!!"); } } }
該析構函數隱式地調用了基類Object的Finalize方法,上面代碼中的析構函數將被隱式地轉換為如下代碼:
protected override void Finalize() { try { Console.WriteLine("小老弟,我是析構函數啊!我被調用了!!!"); } finally { base.Finalize(); //調用Object的Finalize方法 } }
文章評論