標籤:
顧名思義 匿名型別就是沒有名字的類型。當一個新的匿名對象定義與前面已經存在的類型定義的內部變數類型同樣時,編譯器就會僅僅產生一個類定義,而不是各一個。
匿名型別對象中仍然能夠再包括匿名對象。
在C#3.0中同意我們在程式中聲明一個暫時的類型來儲存資料,比如:
class Program { static void Main(string[] args) { //聲明一個匿名對象,擁有 Name和Age 屬性 var obj = new { Name = "Joey", Age = 25 };//這裡的new { Name = "Joey", Age = 25 } 就是一個匿名型別 。obj則是這個類型的一個對象。稱為匿名對象 Console.WriteLine("匿名對象obj : Name=" + obj.Name + " , Age=" + obj.Age); } }
上述代碼中,我們聲明了一匿名對象obj ,然後輸出對象的屬性值。
假設在VS 你將滑鼠移到 obj前面的var 上面,vs 會提示:obj 是一個匿名型別 ‘a 。
這個‘a 是編譯器自己主動作為標識的一個類型,匿名對象在編譯時間。編譯器還是得給它一個類型。
事實上上面的匿名型別 new { Name = “Joey”, Age = 25 } 是直接從Object繼承過來的, 相當於
public class ‘a{
public string Name{get;private set;}
public int Age{get;private set;}
}
這種一個擁有僅僅讀屬性的自己定義類型。
在MSDN 中匿名型別的定義是這種:
1.匿名型別提供了一種方便的方法。可用來將一組僅僅讀屬性封裝到單個對象中,而無需首先顯式定義一個類型。
2.類型名由編譯器產生,而且不能在源碼級使用。每一個屬性的類型由編譯器判斷。
3.可通過使用 new 運算子和對象初始值建立匿名型別。
上面三句話是所謂的”說到點子上了”.讓人一看就明確匿名型別。可是在這裡,我還得提一提,匿名型別和var 隱式類型化的聲明關鍵字的關係;
非常多新手在看到var 聲明時。就認為這是一個匿名對象,匿名型別的對象是必須用var 來聲明,可是用var 聲明的對象不一定都是匿名對象,比如 var n=5; 你就不能說n 是一個匿名對象,n僅僅是一個隱式類型化的局部變數;而 var s=new{ S1=”abc”,S2=”def”}; s 則是一個 類型為匿名型別的對象。也就是說 匿名對象是 用var 聲明的一個 在記憶體中暫時的類型的對象。它的類型不能像隱式類型那樣依據右邊的執行個體畫運算式來判斷類型。它是一個實實在在的匿名型別,而var i=5; 這種隱式類型的聲明,編譯時間,i事實上還是 int32 類型,隱式類型僅僅是一種文法。
希望以上分享對初學朋友有些協助,謝謝!
很多其它關注付義方技術部落格:http://blog.csdn.net/fuyifang
或者直接用手機掃描二維碼查看很多其它博文:
C#超級有用的一種類型—匿名型別