位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 構造函數(shù)和析構函數(shù)

提問人:劉團圓發(fā)布時間:2020-12-07

在c#中定義類時,常常不需要定義相關的構造函數(shù)和析構函數(shù),因為在編寫代碼時,如果沒有提供它們,編譯器會自動添加它們。但是,如有必要,可以提供自己的構造函數(shù)和析構函數(shù),以便初始化對象和清理對象。使用下述語法可以把一個簡單的構造函數(shù)添加到類中:

class MyClass

{

    public MyClass()

    {

        // Constructor code.

    }

}

這個構造函數(shù)與包含它的類同名,且沒有參數(shù)(使其成為類的默認構造函數(shù)),這是一個公共函數(shù),所以類的對象可以使用這個構造函數(shù)進行實例化。

也可以使用私有的默認構造函數(shù),一般僅包含靜態(tài)成員的類會使用。即不能用這個構造函數(shù)來創(chuàng)建這個類的對象實例:

class MyClass 

{

    private MyClass()

    {

        // Constructor code.

    }

}

最后,通過提供參數(shù),也可以采用相同的方式給類添加非默認的構造函數(shù),例如:

class MyClass 

{

    public MyClass(}

    {

        // Default constructor code.

    }

    public MyClass (int myInt)

    {

        // Nondefault constructor code (uses raylnt).

    }

}

可提供的構造函數(shù)的數(shù)量不受限制(當然不能耗盡內(nèi)存,也不能有相同的參數(shù)集,所以“幾乎不受限”更合適)。

使用略微不同的語法來聲明析構函數(shù)。在.NET中使用的析構函數(shù)(由System.Object類提供鄉(xiāng)為Finalize(),但這不是我們用于聲明析構函數(shù)的名稱。使用下面的代碼,而不是重寫Finalize():

class MyClass 

{

    ^MyClass()

    {

        // Destructor body.

    }

}

類的析構函數(shù)由帶有?前綴的類名來聲明(構造函數(shù)也使用類名聲明)。當進行垃圾回收時,就執(zhí)行析構函數(shù)中的代碼,釋放資源。調(diào)用這個析構函數(shù)后,還將隱式地調(diào)用基類的析構函數(shù),包括System.Object根類中的Finalize()調(diào)用。該技術可以讓.NETFramework確保調(diào)用Finalize(),因為重寫FinalizeO則意味著需要顯式地執(zhí)行基類調(diào)用,這具有潛在危險。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部