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

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

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

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

    從LINQ的角度看待C#3.0的新功能

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

    領測軟件測試網

     


     

    coffees = ["French Roast", "Columbian", "Kona"];//這不是初始化,而是賦值。

      對象初始化表達式是語言集成查詢的一個重要功能,因為它們允許在僅允許表達式的上下文(如 λ 表達式和表達式樹)中生成新的結構化值。
    5. Anonymous types

      C# 3.0 permits the new operator to be used with an anonymous object initializer to create an object of an anonymous type.

    霍霍,implicitly typed local variables + object initializer = anonymous types!

      LINQ 項目支持以數據為中心的編程樣式,其中,某些類型的存在主要是為了通過結構化值提供靜態“形式”,而不是提供同時具有狀態和行為的完整對象!涿愋驮试S將新的結構定義為與它們的初始化進行“內聯”。
      6. Implicitly typed arrays

      The syntax of array creation expressions (§7.5.10.2) is extended to support implicitly typed array creation expressions.

    implicitly typed local variables + collection initializer = Implicitly typed arrays
      7. Query expressions

      Query expressions provide a language integrated syntax for queries that is similar to relational and hierarchical query languages such as SQL and XQuery.

      The C# 3.0 language does not specify the exact execution semantics of query expressions. Rather, C# 3.0 translates query expressions into invocations of methods that adhere to the query expression pattern. Specifically, query expressions are translated into invocations of methods named Where, Select, SelectMany, Join, GroupJoin, OrderBy, OrderByDescending, ThenBy, ThenByDescending, GroupBy, and Cast that are expected to have particular signatures and result types.

      C#引入了很多語言構造來支持特定的操作。比如foreach語句、using語句等,在支持函數回調的語言中,這些語句的功能都可以用函數來模擬,C++ STL中就有for_each函數。

      C#3.0的Query expressions應該也是這類語言構造。乍一看,貌似可以在C#中寫類似SQL的查詢語句來從對象中提取信息了——把查詢語句寫在字符串中并不稀奇,C#3.0的厲害之處在于,它把查詢語句提升為語言級別的構造。至于實現原理,似乎與C語言的宏有神似之處,編譯器在類型綁定和重載決策之前,把查詢表達式翻譯為相應的方法調用。比如下面的查詢表達式

    from c in customers group c by c.Country into g select new { Country = g.Key, CustCount = g.Count() }

      將被翻譯為

    customers. GroupBy(c => c.Country). Select(g => new { Country = g.Key, CustCount = g.Count() })

      顯然,為了支持查詢表達式,customers所在的類型必須包含GroupBy,Select等方法(pzy:這種方法稱為“查詢操作符”,引入擴展方法的主要意圖就是讓用戶可以定義查詢操作符。)的定義。

      從查詢表達式到方法調用的翻譯,是在語法層面上,于是我感覺,之前的一堆功能,動機都是簡化、統一、兼容語法,它們在一定程度上是為查詢表達式服務的。比如擴展方法,就是為了能夠以與實例方法相同的語法調用在其它類中定義的靜態方法。

      與 foreach 語句一樣,查詢語法是一個方便的聲明性代碼縮寫,您可以手動編寫它。
      8. Expression trees

      Expression trees permit lambda expressions to be represented as data structures instead of executable code.

      把代碼封裝為數據?還沒領會它的真正意圖是什么,好像也是為查詢表達式服務的。

      λ 表達式的優點是,能夠提供最直接而簡潔的創作語法。更重要的是,λ 表達式可以編譯為代碼,也可以編譯為數據,從而允許優化器、轉換器和計算器在運行時處理 λ 表達式。表達式樹是 λ 表達式的有效內存中數據表示形式,它使表達式的結構透明且顯式。


    編譯器是發出可執行 IL 還是表達式樹取決于 λ 表達式的用法。如果將 λ 表達式指定給委托類型的變量、字段或參數,則編譯器將發出與匿名方法等效的 IL。如果將 λ 表達式指定給 Expression 類型的變量、字段或參數,則編譯器將發出表達式樹。

    例如,請考慮以下兩個變量聲明:

    Func f = n => n < 5; Expression e = n => n < 5;

      變量 f 是對委托的引用,可以直接執行:

    bool isSmall = f(2); // isSmall is now true

    延伸閱讀

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

    32/3<123>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(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>