香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(25)析構函數

C#Lonely2019-05-09 01:00:0052次0條

析構函數用于在類銷毀之前釋放類實例所使用的托管和非托管資源。對于C#應用程序所創建的大多數對象,可以依靠.NET Framework的垃圾回收器(GC)來隱式地執行內存管理任務。但若創建封裝了非托管資源對象,在應用程序使用完這些非托管資源之后,垃圾回收器將運行對象的析構函數(即Finalize方法)來釋放這些資源。

.NET Framework的垃圾回收器機制,GC能夠自動的幫助我們釋放資源。但我們一般不去手動的調用GC幫助我們回收,而是由程序自動的使用GC去回收資源。但有可能程序結束的時候,GC沒有馬上幫助我們去釋放資源,如果你想讓資源馬上被釋放的時候,就可以使用析構函數。

香蕉视频app析構函數作用:幫助我們釋放資源。當程序結束,你想讓資源馬上被釋放的時候,就可以使用析構函數,如果你不使用析構函數的話,那么就由垃圾回收器來自動幫助我們釋放資源。析構函數則是在垃圾回收、釋放資源時使用的。

程序員無法控制何時調用析構函數,因為這是由垃圾回收器決定的。 垃圾回收器檢查是否存在應用程序不再使用的對象,如果垃圾回收器認為某個對象符合析構,則調用析構函數,并回收用來存儲此對象的內存。 程序退出時也會調用析構函數。即香蕉视频app當對象脫離其作用域時(例:對象所在的函數已調用完畢),系統自動執行析構函數。

如果用戶沒有編寫析構函數,C#編譯器會自動生成一個缺省的析構函數,它也不進行任何操作。所以許多簡單的類中沒有用顯式的析構函數。

定義析構函數的語法:

~類名()

{

    語句塊;

}

定義析構函數時需要注意以下幾點:

香蕉视频app1、只能對類使用析構函數,不能在結構體中定義析構函數。

香蕉视频app2、一個類只能有一個析構函數。

香蕉视频app3、無法繼承或重載析構函數。

4、析構函數不允許有修飾符和參數。

香蕉视频app5、無法顯式地調用析構函數,因為析構函數是有垃圾回收器自動調用的。

代碼示例:

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方法
    }
}





暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!