C#析構函數


一、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()析構函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM