1. 定義:
簡(jiǎn)單來(lái)講,析構(gòu)函數(shù)婴噩,是用來(lái)幫助我們來(lái)進(jìn)行廢棄對(duì)象的內(nèi)存回收的機(jī)制擎场。
2. 語(yǔ)法:
~類名()
{
}
3. 示例:
class Car
{
~Car() //析構(gòu)函數(shù)
{
}
}
4. 注意點(diǎn):
- 只能對(duì)類使用析構(gòu)函數(shù)羽德。
- 一個(gè)類只能有一個(gè)析構(gòu)函數(shù)。
- 無(wú)法繼承或重載析構(gòu)函數(shù)迅办。
- 無(wú)法調(diào)用析構(gòu)函數(shù)宅静。 它們是被自動(dòng)調(diào)用的。
- 析構(gòu)函數(shù)既沒(méi)有修飾符站欺,也沒(méi)有參數(shù)姨夹。
- 不應(yīng)使用空析構(gòu)函數(shù)。 如果析構(gòu)函數(shù)為空矾策,只會(huì)導(dǎo)致不必要的性能損失磷账。
5. 作用:
程序員無(wú)法控制何時(shí)調(diào)用析構(gòu)函數(shù),因?yàn)檫@是由垃圾回收器決定的贾虽。 垃圾回收器檢查是否存在應(yīng)用程序不再使用的對(duì)象够颠。 如果垃圾回收器認(rèn)為某個(gè)對(duì)象符合析構(gòu),則調(diào)用析構(gòu)函數(shù)(如果有)并回收用來(lái)存儲(chǔ)此對(duì)象的內(nèi)存榄鉴。 程序退出時(shí)也會(huì)調(diào)用析構(gòu)函數(shù)履磨。
通常,與運(yùn)行時(shí)不進(jìn)行垃圾回收的開發(fā)語(yǔ)言相比庆尘,C# 無(wú)需太多的內(nèi)存管理剃诅。 這是因?yàn)?.NET Framework 垃圾回收器會(huì)隱式地管理對(duì)象的內(nèi)存分配和釋放。 但是驶忌,當(dāng)應(yīng)用程序封裝窗口矛辕、文件和網(wǎng)絡(luò)連接這類非托管資源時(shí),應(yīng)當(dāng)使用析構(gòu)函數(shù)釋放這些資源付魔。 當(dāng)對(duì)象符合析構(gòu)時(shí)聊品,垃圾回收器將運(yùn)行對(duì)象的Finalize方法。
6. 繼承鏈中析構(gòu)函數(shù)的釋放順序
class First
{
~First()
{
Console.WriteLine("First's destructor is called.");
}
}
class Second : First
{
~Second()
{
Console.WriteLine("Second's destructor is called.");
}
}
class Third : Second
{
~Third()
{
Console.WriteLine("Third's destructor is called.");
}
}
class TestDestructors
{
static void Main()
{
Third t = new Third();
}
}
/* Output :
Third's destructor is called.
Second's destructor is called.
First's destructor is called.
*/