匿名類型是在初始化的時候根據初始化列表自動產生類型的一種機制,利用對象初始化器來創建匿名對象的對象。如:
var oec=new {Name="oec2003", Age=100}
在創建對象的語句中用到了var和new兩個關鍵字,
var關鍵字用來聲明一個匿名類型的對象名字,var和Object不同,她是一種強類型,在此是起到了一個占位符的作用,編譯時編譯器會推斷出實際類型。
new關鍵字後直接是一對大括號,並不是類型名稱,因為匿名類型的名字是在編譯時由編譯器自動生成。大括號裡的Name和Age為匿名類型的屬性,可以看到是在Name和Age的後面直接賦值,並沒有指明類型,也將由編譯器來推斷出他們的類型,比如編譯後會將Name推斷為string型,Age推斷為Int型。所以我們可以看到匿名類型給我們帶來了很大的方面和靈活性,同時也將使代碼變得不易看懂。
上面的代碼經過編譯後會產生類似如下代碼
class Anonymous1
{
private int _name = oec2003;
private int _age = 100;
public int a
{
get { return _name; }
set { _name = value; }
}
public int b
{ get { return _age; }
set { _age = value; }
}
}
在同一個程序中如果定義的不同匿名類型中的對象初始化器中的名稱,類型,和順序都相同,將會長生同一個匿名類型的不同實例,如下:
var oec1=new {Name="oec2003" ,Age=100}
var oec2=new {Name="oec2004" ,Age=200}
oec1=oec2
我們可以這樣來訪問匿名類型中的成員
var oec=new {Name="oec2003", Age=100}
string name=oec.Name;
int age=oec.Age