在類裡寫“~”是什麼意思啊?


在類裡寫:
public BaseClass()
{
 ...........
  ...........
}
~BaseClass()
{
  ........
}
這裡的“~”是什麼意思啊?高手指教

10 个解决方案

#1


析構函數~

#2


析構函數

#3



析構函數(C# 編程指南)  


析構函數用於析構類的實例。

備注
不能在結構中定義析構函數。只能對類使用析構函數。

一個類只能有一個析構函數。

無法繼承或重載析構函數。

無法調用析構函數。它們是被自動調用的。

析構函數既沒有修飾符,也沒有參數。

例如,下面是類 Car 的析構函數的聲明:

C#  復制代碼 
class Car
{
    ~ Car()  // destructor
    {
        // cleanup statements...
    }
}

 

該析構函數隱式地對對象的基類調用 Finalize。這樣,前面的析構函數代碼被隱式地轉換為:

  復制代碼 
protected override void Finalize()
{
    try
    {
        // cleanup statements...
    }
    finally
    {
        base.Finalize();
    }
}
 

這意味着對繼承鏈中的所有實例遞歸地調用 Finalize 方法(從派生程度最大的到派生程度最小的)。

注意 
不應使用空析構函數。如果類包含析構函數,Finalize 隊列中則會創建一個項。調用析構函數時,將調用垃圾回收器來處理該隊列。如果析構函數為空,則只會導致不必要的性能丟失。
 

程序員無法控制何時調用析構函數,因為這是由垃圾回收器決定的。垃圾回收器檢查是否存在應用程序不再使用的對象。如果垃圾回收器認為某個對象符合析構,則調用析構函數(如果有)並回收用來存儲此對象的內存。程序退出時也會調用析構函數。

可以通過調用 Collect 強制進行垃圾回收,但大多數情況下應避免這樣做,因為這樣會導致性能問題。有關更多信息,請參見強制垃圾回收。

使用析構函數釋放資源
通常,與運行時不進行垃圾回收的編程語言相比,C# 無需太多的內存管理。這是因為 .NET Framework 垃圾回收器會隱式地管理對象的內存分配和釋放。但是,當應用程序封裝窗口、文件和網絡連接這類非托管資源時,應當使用析構函數釋放這些資源。當對象符合析構時,垃圾回收器將運行對象的 Finalize 方法。

資源的顯式釋放
如果您的應用程序在使用昂貴的外部資源,則還建議您提供一種在垃圾回收器釋放對象前顯式地釋放資源的方式。可通過實現來自 IDisposable 接口的 Dispose 方法來完成這一點,該方法為對象執行必要的清理。這樣可大大提高應用程序的性能。即使有這種對資源的顯式控制,析構函數也是一種保護措施,可用來在對 Dispose 方法的調用失敗時清理資源。

有關清理資源的更多詳細信息,請參見下列主題:

清理非托管資源 

實現 Dispose 方法 

using 語句(C# 參考) 

示例
下面的示例創建三個類,這三個類構成了一個繼承鏈。類 First 是基類,Second 是從 First 派生的,而 Third 是從 Second 派生的。這三個類都有析構函數。在 Main() 中,創建了派生程度最大的類的實例。注意:程序運行時,這三個類的析構函數將自動被調用,並且是按照從派生程度最大的到派生程度最小的次序調用。

C#  復制代碼 
class First
{
    ~First()
    {
        System.Console.WriteLine("First's destructor is called");
    }
}

class Second: First
{
    ~Second()
    {
        System.Console.WriteLine("Second's destructor is called");
    }
}

class Third: Second
{
    ~Third()
    {
        System.Console.WriteLine("Third's destructor is called");
    }
}

class TestDestructors
{
    static void Main() 
    {
        Third t = new Third();
    }
}

 

輸出
Third's destructor is called 

Second's destructor is called 

First's destructor is called 

C# 語言規范
有關更多信息,請參見 C# 語言規范中的以下各章節:

1.6.6.6 析構函數

10.2.7.4 為析構函數保留的成員名稱

10.12 析構函數(類)

11.3.9 析構函數(結構)

請參見
參考
IDisposable

概念
C# 編程指南

其他資源
構造函數(C# 編程指南)
垃圾回收


 要提出有關“幫助”或本產品其他功能的建議或錯誤報告,請轉到反饋站點。

#4


暈,樓上的大哥真快啊

#5


都解釋得這么詳細,沒我插針的地方了....

#6


真強呀

#7


析構函數

#8


析構函數
釋放資源

#9


ref:
http://blog.csdn.net/Knight94/archive/2006/08/05/1023352.aspx

#10


不建議在c#中去定義析構函數

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com