C#析構函數 (轉載)
阿新 • • 發佈:2019-01-25
清理 控制 main 特殊 spa tro 我們 sin 構造函數的調用
程序退出時會調用析構函數。
我們可以通過調用Collect強制進行垃圾回收,但是請不要這樣做,因為這樣做可能導致性能問題。
一、C#析構函數
1. 析構函數的定義與註意的問題
析構函數用於釋放被占用的系統資源。
析構函數的名字由符號“~”加類名組成。
使用析構函數時,應該註意下面的問題:
- 只能在類中使用析構函數,不能在結構中使用析構函數。
- 一個類只能有一個析構函數。
- 不能繼承或重載析構函數。
- 析構函數只能被自動調用。
- 析構函數沒有任何修飾符、沒有任何參數、也不返回任何值。
2. 調用析構函數
垃圾回收器決定了析構函數的調用,我們無法控制何時調用析構函數。
垃圾回收器檢查是否存在應用程序不再使用的對象。如果垃圾回收器認為某個對象符合析構,則調用析構函數(如果有)並回收用來存儲此對象的內存。
我們可以通過調用Collect強制進行垃圾回收,但是請不要這樣做,因為這樣做可能導致性能問題。
二、構造函數與析構函數的區別
構造函數和析構函數是在類中說明的兩種特殊的成員函數。
構造函數是在創建對象時,使用給定的值將對象初始化。
析構函數用於釋放一個對象。在對象刪除前,使用析構函數做一些清理工作,它與構造函數的功能正好相反。
三、示例
using System; 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#析構函數 Third Third1 = new Third(); // 創建類的實例 } } }
程序運行時,這三個類的析構函數將自動被調用,調用順序是按照從派生程度最大的(~Third())到派生程度最小的(~First())次序調用的,和構造函數的調用順序正好相反。
運行結果:
~Third()析構函數
~Second()析構函數
~First()析構函數
原文鏈接
C#析構函數 (轉載)