這篇文章將為大家詳細(xì)講解有關(guān)C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)的區(qū)別是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、伍家崗網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為伍家崗等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
C#構(gòu)造函數(shù)和析構(gòu)函數(shù)
在你可以訪問一個類的方法、屬性或任何其它東西之前, ***條執(zhí)行的語句是包含有相應(yīng)類的C#構(gòu)造函數(shù)和析構(gòu)函數(shù)。甚至你自己不寫一個構(gòu)造函數(shù),也會有一個缺省的構(gòu)造函數(shù)提供給你。
class TestClass { public TestClass(): base() {} // 由編譯器提供 }
一個構(gòu)造函數(shù)總是和它的類名相同,但是,它沒有聲明返回類型??傊?,構(gòu)造函數(shù)總是public的,你可以用它們來初始化變量。
public TestClass() { // 在這給變量 // 初始化代碼等等。 }
如果類僅包含靜態(tài)成員(能以類型調(diào)用,而不是以實例調(diào)用的成員),你可以創(chuàng)建一個private的構(gòu)造函數(shù)。
private TestClass() {}
盡管存取修飾符在這一章的后面將要大篇幅地討論,但是private意味著從類的外面不可能訪問該構(gòu)造函數(shù)。所以,它不能被調(diào)用,且沒有對象可以自該類定義被實例化。并不僅限于無參數(shù)構(gòu)造函數(shù)——你可以傳遞初始參數(shù)來初始化成員。
public TestClass(string strName, int nAge) { …… }
作為一個C/C++程序員,你可能習(xí)慣于給初始化寫一個附加的方法,因為在構(gòu)造函數(shù)中沒有返回值。當(dāng)然,盡管在C#中也沒有返回值,但你可以引發(fā)一個自制的異常,以從構(gòu)造函數(shù)獲得返回值。更多有關(guān)異常處理的知識在第七章 "異常處理"中有討論。
但是,當(dāng)你保留引用給寶貴的資源,應(yīng)該想到寫一個方法來解決:一個可以被顯式地調(diào)用來釋放這些資源。問題是當(dāng)你可以在析構(gòu)函數(shù)(以類名的前面加"~"的方式命名)中做同樣的事情時,為何還要寫一個附加的方法。
public ~TestClass() { // 清除 }
你應(yīng)該寫一個附加方法的原因是垃圾收集器,它在變量超出范圍后并不會立即被調(diào)用,而僅當(dāng)間歇期間或內(nèi)存條件滿足時才被觸發(fā)。當(dāng)你鎖住資源的時間長于你所計劃的時間時,它就會發(fā)生。因此,提供一個顯式的釋放方式是一個好主意,它同樣能從析構(gòu)函數(shù)中調(diào)用。
public void Release() { // 釋放所有寶貴的資源 } public ~TestClass() { Release(); }
關(guān)于C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。