最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2012年11月07日 16:33:12   作者:  
一般情況下,一個類都會有多個構(gòu)造函數(shù)。隨著時間的推移,成員變量、構(gòu)造函數(shù)不斷增加
一般情況下,一個類都會有多個構(gòu)造函數(shù)。隨著時間的推移,成員變量、構(gòu)造函數(shù)不斷增加。為了處理這種情況最方便的辦法就是:在聲明變量的時候進(jìn)行初始化,而不是在每個構(gòu)造函數(shù)中進(jìn)行。無論是類成員(靜態(tài)變量)合適實例變量,我們都應(yīng)該充分利用初始化器的語法。

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

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

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

編譯器會在所有的構(gòu)造函數(shù)(包括默認(rèn)構(gòu)造函數(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時
  因為系統(tǒng)默認(rèn)的初始化會將會在所有代碼執(zhí)行前把一切都設(shè)置成0或者null(值類型和引用類型)。而且這一步的操作是位于很底層的實現(xiàn),我們也可以直接將對象賦值設(shè)置為0或null,但是顯然這是多余的。

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

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

public Employee()
{
}

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

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

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

public Employee()
{
empList = new List<Employee>();
}

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

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

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

public Employee()
{
empList = new List<Employee>();
}

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

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

小節(jié):
  成員初始化器是保證類型中成員變量都被初始化的最簡單方法——在聲明變量時就對其進(jìn)行初始化,無論調(diào)用的是那個構(gòu)造函數(shù),初始化器都將會在所有構(gòu)造函數(shù)之前執(zhí)行。這種語法也避免了在添加新的構(gòu)造函數(shù)時遺漏掉重要的初始化代碼。所以,如果對于所有的構(gòu)造函數(shù)某個成員變量的初始化值是一樣的,那么就應(yīng)該盡量使用初始化器語法。

相關(guān)文章

  • WPF引用MVVM框架與使用方法

    WPF引用MVVM框架與使用方法

    這篇文章介紹了WPF引用MVVM框架與使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • ASP.NET樣板項目ABP框架的特性總結(jié)

    ASP.NET樣板項目ABP框架的特性總結(jié)

    這篇文章主要介紹了ASP.NET樣板項目ABP框架的特性總結(jié),ABP框架基于ASP.NET框架,用于開發(fā)Web應(yīng)用程序,需要的朋友可以參考下
    2016-06-06
  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法

    使用 Table 控件可以在 ASP.NET 網(wǎng)頁上創(chuàng)建服務(wù)器可編程的表格。如果要創(chuàng)建的是靜態(tài)表格(運(yùn)行時不會在其中添加或更改內(nèi)容的表格),則應(yīng)使用 HTML 表格,而不是 Table 控件。
    2016-04-04
  • asp.net UpdaeProgress的簡單用法

    asp.net UpdaeProgress的簡單用法

    這個控件相比其他控件,屬性少 使用簡單,就先把這個控件的一般使用方法簡單紀(jì)錄下
    2008-10-10
  • .NET正則表達(dá)式的最佳用法

    .NET正則表達(dá)式的最佳用法

    本文詳細(xì)講解了.NET正則表達(dá)式最佳用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • ASP.NET實現(xiàn)word文檔在線預(yù)覽功能代碼

    ASP.NET實現(xiàn)word文檔在線預(yù)覽功能代碼

    文檔管理系統(tǒng)需要實現(xiàn)WORD能在線預(yù)覽功能,以前覺得挺難的,經(jīng)過一番研究發(fā)現(xiàn),WORD自帶的另存為可以保存為HTMl文件。
    2010-07-07
  • c#中常用的js語句

    c#中常用的js語句

    有時候在開發(fā)中,經(jīng)常輸出一些js與客戶端實現(xiàn)交互,雖然說是c#的其實好多js的,需要的朋友可以收藏下。
    2010-04-04
  • Blazor路由與頁面導(dǎo)航開發(fā)介紹

    Blazor路由與頁面導(dǎo)航開發(fā)介紹

    這篇文章介紹了Blazor路由與頁面導(dǎo)航開發(fā),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • 常用C#關(guān)鍵字詳解教程(比較全面)

    常用C#關(guān)鍵字詳解教程(比較全面)

    學(xué)習(xí)C#很久了,但可能你也和我一樣,總有那么一兩個關(guān)鍵詞,說不清楚它是什么意思,有什么用,那么這篇文章就帶你一一講解。
    2016-04-04
  • asp.net實例代碼protected override void Render(HtmlTextWriter writer)

    asp.net實例代碼protected override void Render(HtmlTextWriter wri

    把最終要輸出的html壓縮后再輸出和最終輸出前先存為html文件,如果發(fā)布最新信息了,可以打開一次default.aspx,然后他又會生成一次html
    2008-08-08

最新評論

象山县| 灵川县| 土默特左旗| 南召县| 台江县| 黔西| 嘉鱼县| 永宁县| 台湾省| 琼结县| 禄丰县| 舟曲县| 南澳县| 新蔡县| 芜湖市| 江城| 秦皇岛市| 林甸县| 宝鸡市| 蕉岭县| 烟台市| 苍南县| 清徐县| 潼南县| 阿拉善盟| 阆中市| 晋城| 林州市| 马山县| 中阳县| 克东县| 新昌县| 德阳市| 西乌| 峡江县| 迭部县| 怀安县| 芮城县| 天津市| 罗江县| 广汉市|