C# 類的析構函數和釋放函數

今天覆習了一下C#基礎知識,剛好看到了析構函數這裏,有了進一步瞭解,記錄一下,與君共勉

~類名()

{

      //一些要釋放的代碼

}

“~”做前綴,加類名就構成了析構函數。

我們不能自己調用析構函數,它是在.NET垃圾收集過程中調用的。我簡單測試了一些,在WinForm中簡單調用類,當窗口關閉時,會調用這個類的析構函數。

我用想用到析構函數,是因爲在處理過程中,要根據實際情況,在不同時期釋放和建立新的對象。

按照MSDN上的話,如果你的代碼中包含需要及時清理的非託管資源,別把它留給析構函數處理,因爲不能保證析構函數會很快運行(.NET垃圾收集我們應該控制不了吧)。我們可以把資源的清理代碼封裝在一個VOID類型的無參數方法中,一般叫做Dispose。

例如我寫的一個基類:

public class CSMOBasic
{

private bool disposed = false;

public CSMOBasic()
{
    #region 構造代碼
    #endregion
}

#region 析構函數,和清理函數

/// <summary>
/// 析構函數
/// </summary>
~CSMOBasic()
{
    //
    Dispose(false);
}

public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    if (disposed == false)
    {
        if (disposing == true)
        {
            //
            //釋放非託管資源的代碼
        }
        //
        //釋放託管資源的代碼
    }
    disposed = true;
}

#endregion

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章