1.隱式類型
1)源起
在隱式類型出現之前,我們聲明一個變量時,需要為它指定相應的類型,甚至在foreach一個集合的時候,也要為遍歷的集合元素,指定變量的類型,隱式類型出現后,程序員就不用再做這個工作了。
2)使用方法
來看看下面的代碼:
var a=1;//int a=1;
var b="123";//string b="123";
var myObj=new MyObj();//MyObj myObj=new MyObj();
上面的每行代碼,與后面的注釋起到的作用完全一樣。也就是說,在聲明一個變量(並且同時給它賦值)的時候,完全不用指定變量的類型,只要一個var就可以解決問題。
3)這樣做會降低性能嗎?
不會!上面的代碼和注釋里的代碼,編譯后產生的IL代碼(中間語言代碼)是完全一樣的(編譯器會根據變量的值,推導出變量的類型,才產生IL代碼)
4)這個關鍵字的好處:
在foreach一個集合時,可以使用var關鍵字代替書寫循環變量的類型;(其它待發現。。)
5)注意事項
你不能用var關鍵字聲明變量時不給它賦值,因為編譯器無法推導出變量的類型。
2.匿名類型
1)源起
創建一個對象,一定要先定義這個對象的類型嗎?不一定,看看下面的代碼
2)使用
var oddsAndEnds = new[]{
new {Name="MVC" , Category="Pattern"},
new {Name="Hat" , Category="Clothing"},
new {Name="Apple" , Category="Fruit"}
};
StringBuilder result = new StringBuilder();
foreach (var item in oddsAndEnds) {
result.Append(item.Name).Append(" ");
}
new關鍵字之后就直接為對象定義屬性,並為這些屬性賦值。而且,對象創建出來之后,在創建對象的方法中,還可以暢通無阻的訪問對象的屬性。
通過結合對象初始化器和類型推斷,可以創建簡答的數據存儲對象,而不需要定義相應的類或結構。
3.自動屬性
1)源起
為一個類定義屬性,我們一般會寫如下的代碼
public class product
{
private string name;
private int price;
public string Name
{
get { return name; }
set { name = value; }
}
public int Price
{
get { return price; }
set { price = value; }
}
}
但很多時候,這些私有變量對我們一點用處都沒有,比如對象關系映射中的實體類。自C#3.0引入了自動實現的屬性,以上代碼可以寫成如下形式:
public class product
{
public string name { get; set; }
public int price { get; set; }
}
4.對象初始化器和集合初始化器
1)源起
我們創建一個對象並給它的屬性賦值,代碼一般寫成這樣子:
var product=new Product();
product.name="小米";
product.price=3;
自C#3.0引入對象初始化器,代碼可以寫成如下形式:
var product=new Product(){name="小米",price=3};
集合初始化器如下定義:
var arr=new List<int>(){1,2,3,4,5,6};
參考資料:
30分鍾LINQ教程
精通ASP.NET MVC 4