一、C#析構函數
1. 析構函數的定義與注意的問題
析構函數用於釋放被占用的系統資源。
析構函數的名字由符號“~”加類名組成。
使用析構函數時,應該注意下面的問題:
?只能在類中使用析構函數,不能在結構中使用析構函數。
?一個類只能有一個析構函數。
?不能繼承或重載析構函數。
?析構函數只能被自動調用。
?析構函數沒有任何修飾符、沒有任何參數、也不返回任何值。
2. 調用析構函數
?垃圾回收器決定了析構函數的調用,我們無法控制何時調用析構函數。
?垃圾回收器檢查是否存在應用程序不再使用的對象。如果垃圾回收器認為某個對象符合析構,則調用析構函數(如果有)並回收用來存儲此對象的內存。
?程序退出時會調用析構函數。
?我們可以通過調用Collect強制進行垃圾回收,但是請不要這樣做,因為這樣做可能導致性能問題。
二、構造函數與析構函數的區別
?構造函數和析構函數是在類中說明的兩種特殊的成員函數。
?構造函數是在創建對象時,使用給定的值將對象初始化。
?析構函數用於釋放一個對象。在對象刪除前,使用析構函數做一些清理工作,它與構造函數的功能正好相反。
三、示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
class First // 基類First
{
~First() // 析構函數
{
Console.WriteLine("~First()析構函數");
}
}
class Second : First // Second類從First類派生
{
~Second() // 析構函數
{
Console.WriteLine("~Second()析構函數");
}
}
class Third : Second // Third類從Second類派生
{
~Third() // 析構函數
{
Console.WriteLine("~Third()析構函數");
}
}
static void Main(string[] args)
{
// C#析構函數-www.baike369.com
Third Third1 = new Third(); // 創建類的實例
}
}
}
程序運行時,這三個類的析構函數將自動被調用,調用順序是按照從派生程度最大的(~Third())到派生程度最小的(~First())次序調用的,和構造函數的調用順序正好相反。
運行結果:
~Third()析構函數
~Second()析構函數
~First()析構函數