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

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

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

在c#中定義類時(shí),常常不需要定義相關(guān)的構(gòu)造函數(shù)和析構(gòu)函數(shù),因?yàn)樵诰帉懘a時(shí),如果沒有提供它們,編譯器會(huì)自動(dòng)添加它們。但是,如有必要,可以提供自己的構(gòu)造函數(shù)和析構(gòu)函數(shù),以便初始化對(duì)象和清理對(duì)象。使用下述語法可以把一個(gè)簡(jiǎn)單的構(gòu)造函數(shù)添加到類中:

class MyClass

{

    public MyClass()

    {

        // Constructor code.

    }

}

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

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

class MyClass 

{

    private MyClass()

    {

        // Constructor code.

    }

}

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

class MyClass 

{

    public MyClass(}

    {

        // Default constructor code.

    }

    public MyClass (int myInt)

    {

        // Nondefault constructor code (uses raylnt).

    }

}

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

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

class MyClass 

{

    ^MyClass()

    {

        // Destructor body.

    }

}

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

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

相關(guān)視頻回答
回復(fù)(0)
返回頂部