1. 程式人生 > >C#析構函數 (轉載)

C#析構函數 (轉載)

清理 控制 main 特殊 spa tro 我們 sin 構造函數的調用

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