濮阳杆衣贸易有限公司

主頁 > 知識庫 > Effective C# 使用成員初始化器而不是賦值語句

Effective C# 使用成員初始化器而不是賦值語句

熱門標(biāo)簽:山西防封卡電銷卡套餐 海外地圖標(biāo)注門市標(biāo) 地圖標(biāo)注多個行程 浙江外呼系統(tǒng)怎么安裝 上海楊浦怎么申請申請400電話 云南外呼電銷機(jī)器人系統(tǒng) 廈門商鋪地圖標(biāo)注 銅川小型外呼系統(tǒng)運(yùn)營商 陜西人工外呼系統(tǒng)哪家好
一般情況下,一個類都會有多個構(gòu)造函數(shù)。隨著時間的推移,成員變量、構(gòu)造函數(shù)不斷增加。為了處理這種情況最方便的辦法就是:在聲明變量的時候進(jìn)行初始化,而不是在每個構(gòu)造函數(shù)中進(jìn)行。無論是類成員(靜態(tài)變量)合適實(shí)例變量,我們都應(yīng)該充分利用初始化器的語法。

C#編程在,一般在聲明一個變量的同時我們會對其進(jìn)行初始化:
復(fù)制代碼 代碼如下:

1 class Employee
2 {
3 private ListEmployee> empList = new ListEmployee>();
4 }

不論我們?yōu)镋mployee類添加了多少個構(gòu)造函數(shù),empList變量都能夠被正確的初始化,這是因?yàn)椋?

編譯器會在所有的構(gòu)造函數(shù)(包括默認(rèn)構(gòu)造函數(shù))的最開始位置生成代碼來為所以的實(shí)例成員變量定義初始化器(進(jìn)行初始化);所以我們不需要再構(gòu)造函數(shù)中為每一個定義的成員變量添加初始化代碼——直接在聲明的時候初始化即可。

初始化器可以看做是構(gòu)造函數(shù)中初始化語句的另一種表示。初始化器生成的代碼會插入到構(gòu)造函數(shù)代碼前面執(zhí)行。初始化器將在為類型執(zhí)行調(diào)用基類構(gòu)造函數(shù)之前執(zhí)行,其順序與類成員變量聲明的順序一樣。

  C#的初始化器語法是一種最簡單的、能夠避免類型中存在未初始化變量的解決辦法。但是在下面的三種情況下應(yīng)該避免使用初始化器:

1.初始化對象為0或null時
  因?yàn)橄到y(tǒng)默認(rèn)的初始化會將會在所有代碼執(zhí)行前把一切都設(shè)置成0或者null(值類型和引用類型)。而且這一步的操作是位于很底層的實(shí)現(xiàn),我們也可以直接將對象賦值設(shè)置為0或null,但是顯然這是多余的。

2.對同一個變量執(zhí)行不同的初始化方式
  使用初始化語句的一個前提是:所有得構(gòu)造函數(shù)都將為該變量設(shè)置同樣的值。我們看下面的示例代碼:
復(fù)制代碼 代碼如下:

class Employee
{
//聲明變量的同時進(jìn)行初始化
private ListEmployee> empList = new ListEmployee>();

public Employee()
{
}

public Employee(int size)
{
empList = new ListEmployee>(size);
}
}

在上面的代碼中,當(dāng)我們調(diào)用第二個構(gòu)造函數(shù)創(chuàng)建初始化指定大小的泛型集合時 ,實(shí)際上時創(chuàng)建了兩個ListEmployee>。第一個創(chuàng)建后馬上變成了垃圾——這是由于初始化器將在所有構(gòu)造函數(shù)之前執(zhí)行。編譯器生成的代碼類似于下面的這段代碼:
復(fù)制代碼 代碼如下:

class Employee
{
//聲明變量
private ListEmployee> empList;

public Employee()
{
empList = new ListEmployee>();
}

public Employee(int size)
{
empList = new ListEmployee>();
empList = new ListEmployee>(size);
}
}

我們可以看到這樣做會影響程序的效率,創(chuàng)建了不必要的對象,所以如果需要在不同的構(gòu)造函數(shù)中執(zhí)行不同的初始化方式時正確的做法應(yīng)該是不適用初始化器,而是先聲明變量,然后在構(gòu)造函數(shù)中進(jìn)行成員變量的初始化,如下:
復(fù)制代碼 代碼如下:

class Employee
{
//聲明變量
private ListEmployee> empList;

public Employee()
{
empList = new ListEmployee>();
}

public Employee(int size)
{
empList = new ListEmployee>(size);
}
}

3.需要進(jìn)行異常處理
  初始化器無法被try語句包裹。所以對象初始化器執(zhí)行的過程中發(fā)生異常都會被傳遞到對象之外。如果在初始化對象的時候可能會拋出異常時我們應(yīng)該將這部分代碼放到構(gòu)造函數(shù)中,對其進(jìn)行異常處理。這樣才能夠?qū)崿F(xiàn)必要的恢復(fù)性代碼,以創(chuàng)建類型實(shí)例并以更友好的方式處理異常。

小節(jié):
  成員初始化器是保證類型中成員變量都被初始化的最簡單方法——在聲明變量時就對其進(jìn)行初始化,無論調(diào)用的是那個構(gòu)造函數(shù),初始化器都將會在所有構(gòu)造函數(shù)之前執(zhí)行。這種語法也避免了在添加新的構(gòu)造函數(shù)時遺漏掉重要的初始化代碼。所以,如果對于所有的構(gòu)造函數(shù)某個成員變量的初始化值是一樣的,那么就應(yīng)該盡量使用初始化器語法。
您可能感興趣的文章:
  • Effective Java (異常處理)
  • Mono for Android 實(shí)現(xiàn)高效的導(dǎo)航(Effective Navigation)
  • Java 如何判斷Integer類型的值是否相等
  • 8個工程必備的JavaScript代碼片段
  • Java第三方庫JodaTime的具體使用
  • JavaScript中常用的數(shù)組操作方法
  • Effective Java 在工作中的應(yīng)用總結(jié)

標(biāo)簽:朔州 常州 自貢 許昌 信陽 孝感 西雙版納 萊蕪

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Effective C# 使用成員初始化器而不是賦值語句》,本文關(guān)鍵詞  Effective,使用,成員,初始化,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Effective C# 使用成員初始化器而不是賦值語句》相關(guān)的同類信息!
  • 本頁收集關(guān)于Effective C# 使用成員初始化器而不是賦值語句的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    昔阳县| 大名县| 保定市| 楚雄市| 琼结县| 同心县| 迭部县| 宾阳县| 深州市| 广河县| 岱山县| 吴忠市| 绍兴县| 昆山市| 三都| 兴隆县| 霍邱县| 资溪县| 仁化县| 尚志市| 乳山市| 武鸣县| 肥城市| 合阳县| 砚山县| 昭觉县| 贡嘎县| 剑川县| 陈巴尔虎旗| 沈丘县| 呼伦贝尔市| 铁岭市| 揭东县| 上高县| 阜康市| 霍山县| 菏泽市| 莱西市| 达拉特旗| 锦屏县| 宜黄县|