程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0中新匿名類型特性初體驗(·1)

C# 3.0中新匿名類型特性初體驗(·1)

編輯:關於C語言

在去年PDC2005上,在發布C#2.0 (C# Whidbey)的同時,微軟也同時展示了它 們在C# 3.0上的一些計劃。在提到一系列新的語言特性如語言集成查詢(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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved