• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    C#3.0與LINQ新特性簡介

    發布: 2008-5-07 13:44 | 作者: 網絡轉載 | 來源: 本站原創 | 查看: 147次 | 進入軟件測試論壇討論

    領測軟件測試網

     

    現在,使用對象初始化,就可以像這樣子來重寫:

    Point p = new Point() { X = 0, Y = 0 };

      這個特性也可以使用在集合上,看看下面這段示例:

    List points = new List { new Point { X = 2, Y = 5 }, new Point { X = 1, Y = -10 }, new Point { X = 3, Y = 0 } };

      注意,編譯器會產生和上面相等價的長一些的代碼,它依次調用Add()方法來在集合里添加元素。

      IV/ 匿名類型

      這個語言特性讓我們可以定義內嵌的類型,而不需要顯式地定義一個類型。換句話說,假設我們沒有定義Point類,卻要使用一個Point對象(即類型是匿名的)。我們可以使用上面提到的對象初始化語法,但不用指定類型名:

    var p = new {X = 0, Y = 2};

      在VS2008中,你仍然可以使用智能感應。所以如果你繼續使用變量p,就會得到這個匿名類型的屬性列表。

      V/ Lambda表達式

      在C#2.0 中引入了匿名方法,允許在需要委托的地方寫一個代碼塊。匿名方法提供了函數式程序語言的能力,語法顯得很簡潔。Lambda表達式提供了一個更簡潔的語法來寫匿名方法。一個Lambda表達式就是一個參數列表(可以隱式類型),然后是一個=>符號,然后是一個表達式或者一個語句塊。

      作為一個示例,我們定義一個委托類型MyDeleg:

    delegate R MyDeleg(A arg);

      然后我們就可以使用匿名方法:

    MyDeleg<int,bool> IsPositive = delegate(int num) { return num > 0; };

      我們也可以使用新的Lambda表達式來寫:

    MyDeleg<int,bool> IsPositive = num => num > 0;

      VI/ 擴展方法

      擴展方法可以使你來擴展一個已存在的類型,增加它的方法,而無需繼承它或者重新編譯。所以不像為對象寫助手方法,擴展方法可以直接是對象自己的一部分。

      一個示例,假設我們想要驗證一個string是不是合法的Email地址,我們可以編寫一個方法,輸入為一個string并且返回true或者false,F在,使用擴展方法,我們可以如下這樣做:

    public static class MyExtensions { public static bool IsValidEmailAddress(this string s) { Regex regex = new Regex( @"^[w-.]+@([w-]+.)+[w-]{2,4}$" ); return regex.IsMatch(s); } }

      我們定義了一個帶有靜態方法的靜態類。注意,那個靜態方法在參數類型string前面有一個this關鍵詞,這會告訴編譯器這個特殊的擴展方法會增加給string類型的對象。于是我們就可以在string中調用這個成員方法:

    using MyExtensions; string email = Request.QueryString["email"]; if ( email.IsValidEmailAddress() ) { // }

      值得提出的是,LINQ就是使用了System.Linq命名空間中的擴展方法(比如where()、orderby()、select()、sum()、average()等等),而且它定義了標準查詢操作符,可以用來查詢關系數據庫、XML和任何實現了IEnumerable<T>接口的.NET對象。

      VII/ 查詢語法

      查詢表達式提供了一個語言集成的語法來查詢,它特別像關系和層次查詢語言比如SQL和XQuery。使用LINQ操作符(也就是from...where...select)寫查詢很方便,Visual Studio為它提供了很好的智能感知和編譯時的檢查支持。
      當C#編譯器遇到了一個查詢語法表達式時,實際上它會被轉化為使用擴展方法和Lambda表達式的方法調用。

      我們舉一個例子來解釋這個:

    var result = from c in Customers where c.City.StartsWith("B") orderby c.LastName select new { c.FirstName, c.LastName, c.Address };

      上面的代碼等價于:

    var result = Customers.Where( c => c.City.StartsWith("B") ) .OrderBy( c => c.LastName ) .Select( c => new { c.FirstName, c.LastName, c.Address } );

      使用查詢語法的好處還有它會使代碼更簡單更易讀。
      同時注意,查詢表達式以from開頭,以select或者group結尾。

      最后注意

      C#3.0中新引入的幾個特性大多數都僅僅是“編譯器技巧”或者“語法糖”,其實編譯器生成的IL中間代碼和原來的是一樣的,這樣他們就獨立于framework和CLR運行時。但是,他們確實需要某些framework的支持,比如System.Core.dll程序集。這就是為什么擴展方法仍然需要依靠于System.Core.dll里包含的System.Runtime.CompilerServices.ExtensionAttribute。
    另一方面,查詢表達式只是實現了到擴展方法的映射,它包含在System.Linq, System.Data.Linq和System.Xml.Linq命名空間中。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>