C#的隱式類型、匿名類型、自動屬性、初始化器


1.隱式類型

1)源起
在隱式類型出現之前,我們聲明一個變量時,需要為它指定相應的類型,甚至在foreach一個集合的時候,也要為遍歷的集合元素,指定變量的類型,隱式類型出現后,程序員就不用再做這個工作了。
2)使用方法
來看看下面的代碼:

 
 
 
         
  1. var a=1;//int a=1;
  2. var b="123";//string b="123";
  3. var myObj=new MyObj();//MyObj myObj=new MyObj();

上面的每行代碼,與后面的注釋起到的作用完全一樣。也就是說,在聲明一個變量(並且同時給它賦值)的時候,完全不用指定變量的類型,只要一個var就可以解決問題。
3)這樣做會降低性能嗎?
不會!上面的代碼和注釋里的代碼,編譯后產生的IL代碼(中間語言代碼)是完全一樣的(編譯器會根據變量的值,推導出變量的類型,才產生IL代碼)
4)這個關鍵字的好處:
在foreach一個集合時,可以使用var關鍵字代替書寫循環變量的類型;(其它待發現。。)
5)注意事項
你不能用var關鍵字聲明變量時不給它賦值,因為編譯器無法推導出變量的類型。

2.匿名類型

1)源起
創建一個對象,一定要先定義這個對象的類型嗎?不一定,看看下面的代碼
2)使用

 
 
 
         
  1. var oddsAndEnds = new[]{
  2. new {Name="MVC" , Category="Pattern"},
  3. new {Name="Hat" , Category="Clothing"},
  4. new {Name="Apple" , Category="Fruit"}
  5. };
  6. StringBuilder result = new StringBuilder();
  7. foreach (var item in oddsAndEnds) {
  8. result.Append(item.Name).Append(" ");
  9. }

new關鍵字之后就直接為對象定義屬性,並為這些屬性賦值。而且,對象創建出來之后,在創建對象的方法中,還可以暢通無阻的訪問對象的屬性。
通過結合對象初始化器和類型推斷,可以創建簡答的數據存儲對象,而不需要定義相應的類或結構。

3.自動屬性

1)源起
為一個類定義屬性,我們一般會寫如下的代碼

 
 
 
         
  1. public class product
  2. {
  3. private string name;
  4. private int price;
  5. public string Name
  6. {
  7. get { return name; }
  8. set { name = value; }
  9. }
  10. public int Price
  11. {
  12. get { return price; }
  13. set { price = value; }
  14. }
  15. }

但很多時候,這些私有變量對我們一點用處都沒有,比如對象關系映射中的實體類。自C#3.0引入了自動實現的屬性,以上代碼可以寫成如下形式:

 
 
 
         
  1. public class product
  2. {
  3. public string name { get; set; }
  4. public int price { get; set; }
  5. }

4.對象初始化器和集合初始化器

1)源起
我們創建一個對象並給它的屬性賦值,代碼一般寫成這樣子:

 
 
 
         
  1. var product=new Product();
  2. product.name="小米";
  3. product.price=3;

自C#3.0引入對象初始化器,代碼可以寫成如下形式:

 
 
 
         
  1. var product=new Product(){name="小米",price=3};

集合初始化器如下定義:

 
 
 
         
  1. var arr=new List<int>(){1,2,3,4,5,6};

參考資料:

30分鍾LINQ教程
精通ASP.NET MVC 4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM