c#匿名型別最簡單的例子 自動協助我們建立類

來源:互聯網
上載者:User
  在去年PDC2005上,在發布C#2.0 (C# Whidbey)的同時,微軟也同時展示了它們在C# 3.0上的一些計劃。  在提到一系列新的語言特性如Language-integrated Query (LINQ)(LINQ)等,Redmond同時也介紹了一個新的特性--匿名型別。  本文詳細介紹了匿名型別。   匿名型別定義  C#3.0規範將匿名型別描述為從對象初始化器(object initializer)自動推斷和產生的元群組類型。  在你能夠充分領會這一定義之前,你需要瞭解"對象初始化器"的概念,它是匿名型別特性的基礎。  對象初始化器給一個對象的一個或者多個域或者屬性指定值。  這就意味著你可以通過一系列諸如{a=10,b=20}這樣的賦值操作指定某個對象的一系列屬性。  換句話來說,一個匿名型別是原來不存在的,並且沒有在代碼中明確指定的。  注意,編譯器是在編譯時間建立匿名型別而非運行時。  你可以通過ILDASM(IL分解器)來分解獲得:var p1 = new {Name = "A", Price = 3};  在編譯時間刻,編譯器使用對象初始化器推斷的屬性來傳見一個新的匿名型別。  因而,新類型將會擁有Name和Price的屬性。Get和Set方法和儲存這些屬性的相應的私人變數,會自動的產生。  在運行時,此類型的一個執行個體會被建立,這個執行個體的屬性將會被設定為對象初始化器中指定的值。  C#內部  你可能很驚奇的發現,你可以只定義一些屬性的名稱以及它們的值,C# 3.0會自動的從它們那裡建立類。  這是怎麼做到的呢?檢查一下編譯器的處理吧。  這樣開始一行代碼:var p1 = new {Name = "A", Price = 3};  當C# 3.0編譯器遇到這樣的一個請求的時候,它將在後台將其轉化成更加清楚的表達,如下:class __Anonymous1{ private string name ; private int price; public string Name{ get { return name; } set { name = value ; } } public int Price{ get { return price; } set { price= value ; } }}__Anonymous1 p1 = new __Anonymous1();p1.Name = "A";pt.Price =3  執行個體學習  你需要安裝Visual Studio 2005和.NET 2.0,然後你可以從這裡下載到LINQ技術的預覽版本。  如果你安裝了Visual Studio 2005,你可以看到在Visual C#下多了3個和LINQ預覽有關的工程模板:LINQ Console Application, LINQ Windows Application, 和LINQ Library。  你可以這樣建立一個使用匿名型別的工程:  1. 開啟Visual Studio 2005編輯器,建立一個新工程,選擇LINQ Console作為工程模板;  2. 將新工程命名為AnonTypes並且點擊OK;  3. 在編輯器裡輸入如下代碼:// Program.csusing System;using System.Query;using System.Data.DLinq;namespace AnonTypes{ class Program {  static void Main(string[] args)  {   var p1 = new {Name = "A", Price = 3};   Console.WriteLine("Name = {0}\nPrice = {1}",p1.Name, p1.Price);   Console.ReadLine();  } }}  4. 編譯器  5. 執行程式,獲得如下結果:Name = APrice = 3  如果你沒有Visual Studio 2005,你仍然可以通過命令列來編譯你的代碼:C:\Program Files\LINQ Preview\Bin\Csc.exe/reference:"C:\Program Files\LINQ Preview\Bin\System.Data.DLinq.dll"/reference: System.dll/reference:"C:\Program Files\LINQ Preview\Bin\System.Query.dll"/out:AnonTypes.exe /target:exe Program.cs  儘管你沒有清晰的在代碼裡定義一個類,但是C#編譯器自動做了如下工作:  1. 解析類型  2. 建立一個新的類(擁有name和price屬性)  3. 使用這個類來初始化一個新對象  4. 將傳來的參數指定給對象
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.