国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Effective C# 使用成員初始化器而不是賦值語句

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

2019-10-09 14:56asp.net教程網 ASP.NET教程

一般情況下,一個類都會有多個構造函數。隨著時間的推移,成員變量、構造函數不斷增加

一般情況下,一個類都會有多個構造函數。隨著時間的推移,成員變量、構造函數不斷增加。為了處理這種情況最方便的辦法就是:在聲明變量的時候進行初始化,而不是在每個構造函數中進行。無論是類成員(靜態變量)合適實例變量,我們都應該充分利用初始化器的語法。 

C#編程在,一般在聲明一個變量的同時我們會對其進行初始化: 

復制代碼代碼如下:


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


不論我們為Employee類添加了多少個構造函數,empList變量都能夠被正確的初始化,這是因為: 

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

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

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

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

2.對同一個變量執行不同的初始化方式 
  使用初始化語句的一個前提是:所有得構造函數都將為該變量設置同樣的值。我們看下面的示例代碼:

復制代碼代碼如下:


class Employee 

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

public Employee() 



public Employee(int size) 

empList = new List<Employee>(size); 

}


在上面的代碼中,當我們調用第二個構造函數創建初始化指定大小的泛型集合時 ,實際上時創建了兩個List<Employee>。第一個創建后馬上變成了垃圾——這是由于初始化器將在所有構造函數之前執行。編譯器生成的代碼類似于下面的這段代碼: 

復制代碼代碼如下:


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); 

}


我們可以看到這樣做會影響程序的效率,創建了不必要的對象,所以如果需要在不同的構造函數中執行不同的初始化方式時正確的做法應該是不適用初始化器,而是先聲明變量,然后在構造函數中進行成員變量的初始化,如下:

復制代碼代碼如下:


class Employee 

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

public Employee() 

empList = new List<Employee>(); 


public Employee(int size) 

empList = new List<Employee>(size); 

}


3.需要進行異常處理 
  初始化器無法被try語句包裹。所以對象初始化器執行的過程中發生異常都會被傳遞到對象之外。如果在初始化對象的時候可能會拋出異常時我們應該將這部分代碼放到構造函數中,對其進行異常處理。這樣才能夠實現必要的恢復性代碼,以創建類型實例并以更友好的方式處理異常。 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久久久 | 亚洲精品乱码久久久久久蜜糖图片 | 伊人在线 | 一区二区免费视频 | 毛片在线免费 | 一区二区三区在线免费观看 | 国产日韩欧美一区 | 黑人草逼视频 | 99久久婷婷国产精品综合 | 免费av大全 | 日韩久久精品一区二区 | 亚洲天堂高清 | 国产欧美日韩综合精品一区二区 | 伊人久久在线 | 国产一区免费视频 | 成人国产精品156免费观看 | 久久久久久久久久久久国产精品 | 激情久久免费视频 | 国产乱视频 | 国产一区二区三区久久 | 日韩视频精品在线 | 午夜视频在线观看一区二区三区 | 成人欧美一区二区三区色青冈 | 色女人av| 日本一区二区视频 | 天堂久久爱资源站www | 欧美综合在线观看 | 久久久99国产精品免费 | 懂色av成人一区二区三区 | 99久久婷婷国产精品综合 | 亚洲自拍偷拍网 | 综合色av| 久久精彩视频 | 精品福利一区二区三区 | 自拍偷拍小视频 | 日本欧美久久久久免费播放网 | 日韩精品一区二区在线观看 | 欧美a级网站 | 国产三级一区二区 | 高清精品一区二区 | 亚洲视频在线观看 |