中新匿名類型特性初體驗計劃
在去年P(guān)DC2005上,在發(fā)布C#2.0 (C# Whidbey)的同時,微軟也同時展示了它們在C# 3.0上的一些計劃。在提到一系列新的語言特性如語言集成查詢(LINQ)等,Redmond同時也介紹了一個新的特性--匿名類型。本文詳細介紹了匿名類型。
匿名類型定義
C#3.0規(guī)范將匿名類型描述為從對象初始化器(object initializer)自動推斷和生成的元組類型。在你能夠充分領(lǐng)會這一定義之前,你需要了解\"對象初始化器\"的概念,它是匿名類型特性的基礎(chǔ)。
對象初始化器給一個對象的一個或者多個域或者屬性指定值。這就意味著你可以通過一系列諸如{a=10,b=20}這樣的賦值操作指定某個對象的一系列屬性。換句話來說,一個匿名類型是原來不存在的,并且沒有在代碼中明確指定的。
注意,編譯器是在編譯時創(chuàng)建匿名類型而非運行時。
你可以通過ILDASM(IL分解器)來分解獲得:
var p1 = new {Name = \"A\", Price = 3};
在編譯時刻,編譯器使用對象初始化器推斷的屬性來傳見一個新的匿名類型。因而,新類型將會擁有Name和Price的屬性。Get和Set方法和保存這些屬性的相應(yīng)的私有變量,會自動的生成。在運行時,此類型的一個實例會被創(chuàng)建,這個實例的屬性將會被設(shè)置為對象初始化器中指定的值。
C#內(nèi)部
你可能很驚奇的發(fā)現(xiàn),你可以只定義一些屬性的名稱以及它們的值,C# 3.0會自動的從它們那里創(chuàng)建類。這是怎么做到的呢?檢查一下編譯器的處理吧。
這樣開始一行代碼:
var p1 = new {Name = \"A\", Price = 3};
當C# 3.0編譯器遇到這樣的一個請求的時候,它將在后臺將其轉(zhuǎn)化成更加清楚的表達,如下:
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();
= \"A\";
ice =3
實例學(xué)習
你需要安裝Visual Studio 2005和.NET 2.0,然后你可以從這里下載到LINQ技術(shù)的預(yù)覽版本。
如果你安裝了Visual Studio 2005,你可以看到在Visual C#下多了3個和LINQ預(yù)覽有關(guān)的工程模板:LINQ Console Application, LINQ Windows Application, 和LINQ Library。
你可以這樣創(chuàng)建一個使用匿名類型的工程:
1. 打開Visual Studio 2005器,創(chuàng)建一個新工程,選擇LINQ Console作為工程模板;
2. 將新工程命名為AnonTypes并且點擊OK;
3. 在器里輸入如下代碼:
//
using System;
using ery;
using inq;
namespace AnonTypes
{
class Program
{
static void Main(string[] args)
{
var p1 = new {Name = \"A\", Price = 3};
iteLine(\"Name = {0}\\nPrice = {1}\",, ice);
大唐集團召開黨建人才思想政治工作會議_()中心 adLine();
}
}
}
4. 編譯程序
5. 執(zhí)行程序,獲得如下結(jié)果:
Name = A
Price = 3
如果你沒有Visual Studio 2005,你仍然可以通過命令行來編譯你的代碼:
C:\\Program Files\\LINQ Preview\\Bin\\e
/reference:\"C:\\Program Files\\LINQ Preview\\Bin\\l\"
/reference: l
/reference:\"C:\\Program Files\\LINQ Preview\\Bin\\l\"
/out:e /target:exe
盡管你沒有清晰的在代碼里定義一個類,但是C#編譯器自動做了如下工作:
1. 解析類型
2. 創(chuàng)建一個新的類(擁有name和price屬性)
3. 使用這個類來初始化一個新對象
4. 將傳來的參數(shù)指定給對象
柳州白癜風醫(yī)院術(shù)后病人吃什么營養(yǎng)恢復(fù)快
秦皇島白癜風醫(yī)院
- 徐匯又一家商超恢復(fù)營業(yè),濃濃煙火唯美又回來啦!
- 美元霸權(quán)隕落?俄氣27個買家開設(shè)盧布帳戶,美元對盧布跌破59大關(guān)
- 農(nóng)發(fā)行阿壩州分行助力民營小微民營企業(yè)發(fā)展
- 女人過了40歲要能不穿衛(wèi)衣配牛仔褲!推薦陳數(shù)6套穿搭,真優(yōu)雅
- 各地十分重視嬰幼兒托育服務(wù) 普惠托育園就在家門口(傾聽)
- 腌臘魚,直接抹鹽可不行!多做2步,臘魚更是香更是入味,保存時間長
- 雙搖桿瞄準游戲《滅絕計劃》上線Steam 7月27日發(fā)售
- 中國第一歷史檔案館新館首次面向社會社會大眾開放
- 退圈童星曝光劇組潛規(guī)則!“劇組女友”只是其中之一
- 給狗用藥需科學(xué)千萬不能給羅威納犬吃的藥有位置
- 具有微笑天使之稱的薩摩耶犬薩摩耶名字的來位置
- 我家蘇格蘭牧羊犬有護食的毛病怎么教育好位置