您的位置: 旅游網(wǎng) > 八卦 >> 男友

    中新匿名類型特性初體驗計劃

    發(fā)布時間:2021-10-26 07:19:17

    在去年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ī)院
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 久久久综合亚洲色一区二区三区| 亚洲首页在线观看| 亚洲人成亚洲人成在线观看| 美女让男人捅爽| 国产福利第一页| √天堂资源地址在线官网| 日韩一区二区三区北条麻妃| 亚洲欧美激情在线| 精品国产一区二区三区香蕉事| 国产成人亚洲综合| 777777农村一级毛片| 小宝极品内射国产在线| 久久人人爽爽爽人久久久| 欧美人牲交a欧美精区日韩| 人文艺术欣赏ppt404| 色多多视频在线| 国产成人欧美一区二区三区| 91精品国产高清久久久久久91| 小兔子好大从衣服里跳出来| 久久久久久国产精品免费免费| 桃花阁成人网在线观看| 亚洲熟女少妇一区二区| 精品一区二区三区四区在线| 国产乱人视频在线播放| 免费观看黄色的网站| 国产视频手机在线观看| h视频免费在线| 成人免费看www网址入口| 久久人人爽人人爽人人片AV东京热| 欧美中文字幕在线看| 亚洲精品人成电影网| 福利视频一区二区牛牛| 四虎.com官网| 视频二区中文字幕| 国产成人无码a区在线观看视频| 182tv在线观看国产路线一| 处处吻动漫高清在线观看| 一二三四免费观看在线电影中文| 拨开内裤直接进入| 久久人妻内射无码一区三区 | 中文字幕色婷婷在线视频|