<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#3.0 之 自動屬性 對象初始化器,集合初始器,擴展方法 (轉)

      C#3.0 之 自動屬性 對象初始化器,集合初始器,擴展方法

      來源: http://blog.csdn.net/zyming0815/archive/2009/11/19/4831770.aspx

      Reference
      Orcas中C#語言的新特性:自動屬性,對象初始化器,和集合初始化器
      新Orcas語言特性:擴展方法

      1. 自動屬性:

          public class Person {
              
      public string FirstName { get; set; }
              
      public string LastName  { get; set; }        
              
      public int    Age       { get; set; }
          }

      當Orcas版中的C#編譯器遇上象上面這樣的空的get/set屬性的話,它會自動為你在類中生成一個私有成員變量,對這個變量實現一個公開的getter 和setter

      2. 對象初始化器:

        Person person = new Person { FirstName="Scott", LastName="Guthrie", Age=32 };

      就不用Person person = new Person(); person.FirstName="scott";
      當然也允許嵌套:

         Person person = new Person {
            FirstName 
      "Scott",
            LastName 
      "Guthrie"
            
      Age 32,
            Address 
      = new Address {
               Street 
      "One Microsoft Way",
               City 
      "Redmond",
               State 
      "WA",
               Zip 
      98052
            
      }
         }
      ;

      3 集合初始化器

         List<Person> people = new List<Person> {
            
      new Person { FirstName "Scott", LastName "Guthrie", Age 32 },
            
      new Person { FirstName "Bill", LastName "Gates", Age 50 },
            
      new Person { FirstName "Susanne", LastName "Guthrie", Age 32 }
         }
      ;

      當編譯器遇上上面這樣的句法時,它會自動為我們生成集合插入編碼。
      即 List<Persion> people = new List<Person>(); Person.Add(new Person{...}); Person.Add(new Person{...});

      4. 擴展方法

      例如,驗證一個字符串是否為合法

      一般寫法,定義一個類,實現靜態方法IsValid(string):

      string email Request.QueryString["email"];

      if 
      ( EmailValidator.IsValid(email) ) {
         

      }

        擴展方法允許: 

      string email Request.QueryString["email"];

      if 
      ( email.IsValidEmailAddress() ) {
         

      }

      擴展方法如何實現:

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

      注意,靜態方法的string的參數變量前有個“this”關鍵詞,這告訴編譯器,這個特定的擴展方法應該添加到類型為“string”的對象中去
      使用時,要用“using”語句來引入含有該擴展方法的實現的命名空間

      下面完全轉載過來,寫的很明了

      擴展方法使用場景續...

      利用擴展方法這個新特性來給個別類型添加方法給開發人員開辟了許多有用的擴展性使用場景。但使得擴展方法非常強有力的是,它們不僅能夠應用到個別類型上,也能應用到.NET框架中任何基類或接口上。這允許開發人員建立種種可用于整個.NET框架的豐富的可組合的框架層擴展。

      譬如,考慮這樣一個場景,我想要一個既容易,描述性又強的方式來檢查一個對象是否已經包含在一個對象集合或數組里。我可以定義一個簡單的.In(集合)擴展方法,我想把它添加到.NET框架中的所有對象上,我可以在C#里這么來實現這個“In()”擴展方法:

      注意上面我是如何聲明擴展方法的第一個參數的:“this object o”。這表明,這個擴展方法應該適用于繼承于基類System.Object的所有類型,這意味著我可以在.NET中的每個對象上使用它。

      上面這個“In”方法的實現允許我檢查一個指定的對象是否包含在作為方法參數傳入的一個IEnumerable序列中。因為所有的.NET集合和數組都實現了IEnumerable接口,現在我擁有了一個有用的,描述性強的方法來檢查一個任意的對象是否屬于任何.NET集合或數組。

      然后我就可以使用這個“In()”方法來看一個特定的字符串是否在一個字符串數組中:

      我也可以用它來檢查一個特定的ASP.NET控件是否在一個容器控件集合里:

      我甚至可以將其用在象整數這樣的標量數據類型上:

      注意上面,你甚至可以在象整數值42這樣的基本數據類型值上使用擴展方法。因為CLR支持數值類型的自動boxing/unboxing,擴展方法可以直接使用在數值和其他標量數據類型上。

      你大概可以開始從上面的例子中看出,擴展方法可以促成一些非常豐富和描述性強的擴展性使用場景。當使用于.NET中常見的基類和接口上時,他們可以促成一些非常好的特定于某個領域(domain specific)的框架和組合使用場景。

      內置的System.Linq擴展方法

      一個在Orcas時段隨.NET發布的內置的擴展方法庫是一套允許開發人員對任何數據進行查詢的非常強有力的查詢擴展方法。這些擴展方法實現位于新的 System.Linq 命名空間之下,定義了標準的查詢操作符擴展方法,可以為.NET開發人員用來輕松地查詢XML,關系數據庫,.NET 對象, 和任何其他數據結構類型。

      下面是使用這些查詢擴展方法的擴展性模型的幾個好處:

      1) 它允許一個可用于所有數據類型(數據庫,XML文件,內存中的對象,以及web-services等)的共同的查詢編程模型和語法。

      2) 它是可以組合的,允許開發人員輕松地往查詢語法中添加新的方法/操作符。譬如,我們可以將我們自定義的“In()”方法與為LINQ所定義的標準的“Where()”方法作為一個單獨查詢的一部分一起使用。我們自定義的In()方法看上去就跟由System.Linq命名空間提供的標準方法一樣。

      3) 它是可擴展的,允許與任何數據提供器類型一起使用。譬如,任何一個象NHibernate或LLBLGen這樣現有的ORM引擎可以實現LINQ的標準查詢操作符來允許對他們現有的ORM實現和映射引擎實現LINQ查詢。這允許開發人員學會一個查詢數據的共同方式,然后對種類繁多的豐富數據存儲實現使用同樣的技能。

      我將在下幾個星期里對LINQ作更多的示范,但想留給你幾個例子,這些例子展示了如何對不同類型的數據使用幾個內置的LINQ查詢擴展方法:

      使用場景一:對內存中的.NET對象使用LINQ擴展方法

      假定我們象這樣定義了代表“Person”的類:

      然后創建和填充一個“people”集合,象這樣:

      然后我可以使用由System.Linq提供的標準的“Where()”擴展方法來獲取這個集合中FirstName的首字符是"S"的那些“Person”對象,象這樣:
      Where()就是擴展方法!以函數為參數!

      上面這個新的 p => 語法是“Lambda表達式”的一個例子,是對C# 2.0匿名方法支持的更簡明的發展,允許我們通過一個實參來輕松地表達查詢過濾(在這個情形下,我們表示我們只想要返回一串firstname屬性的首字符是“S”字母的Person對象) 。上面這個查詢然后就會返回包含2個對象的序列,Scott 和 Susanne。

      我也可以利用由System.Linq提供的新的“Average” 和“Max”擴展方法編寫代碼來決定我的集合里的人的平均年齡,以及年齡最大的人,象這樣:

      使用場景二:對XML文件使用LINQ擴展方法

      你手工在內存里創建一個硬寫(hard-coded)的數據集合大概是很少見的。更有可能的是,你會從一個XM文件,數據庫,或web服務里獲取數據。

      假定我們在硬盤上有一個XML文件,包含下面這樣的數據:

      很明顯地,我可以使用現有的 System.Xml APIs 來裝載這個XML文件進一個DOM,然后訪問它,或者使用一個層次較低的XmlReader API ,自己對之手工分析。或者,在 Orcas中,我現在也可以使用支持標準的LINQ擴展方法的System.Xml.Linq 實現(即 XLINQ),更優雅地分析和處理XML。

      下面的代碼例子展示了如何使用LINQ來獲取所有包含一個子節點的值的首字母為“S”的<person> XML元素:

      注意,它使用了跟內存中對象例子中一模一樣的 Where() 擴展方法。現在它返回一個“XElement”元素序列,XElemen是沒有類型的XML節點元素。或者我也可以重寫查詢表達式,通過LINQ的 Select() 擴展方法來構造數據形狀,其實就是映射,將過濾得到的XElement元素序列映射為對象序列

      上面的代碼會做需要打開,分析,和過濾XML,然后返回一個強類型的Person對象序列所有的工作。

      我也可以和前面一樣使用同樣的Average() 和 Max() LINQ擴展方法來計算XML文件中<person>元素的平均年齡,以及最大年齡,象這樣:

      我不用手工分析XML文件,XLINQ 不僅可以為我處理分析,它在估算LINQ表達式時,也可以使用低層的XMLReader,而不是使用DOM來分析文件。這意味著它是迅速之極,而且不分配很多內存。

      使用場景三:對數據庫使用LINQ擴展方法

      假定我們擁有一個SQL數據庫,內含一個叫“People”的表,具有下列數據定義:

      我可以使用Visual Studio中新的LINQ到SQL的所見即所得(WYSIWYG) ORM設計器,快速地創建一個映射到數據庫的“Person”類:

      然后我可以使用我先前用于對象和XML文件同樣的LINQ Where() 擴展方法,從數據庫中獲取firstname的首字符為“S”的強類型“Person”對象序列:

      注意,查詢句法與對象和XML場景中的一模一樣。

      然后我也可以使用與前面一樣的 LINQ Average() 和Max() 擴展方法來從數據庫里獲取平均和最大值,象這樣:

      要使上面代碼例子工作,你自己不需編寫任何SQL代碼。Orcas中提供的LINQ to SQL對象關系映射器會處理獲取,跟蹤,和更新映射到你的數據庫數據定義和存儲過程的對象。你只要使用任何LINQ擴展方法對結果進行過濾和構形即可,LINQ to SQL會執行獲取數據所需的SQL代碼(注意,上面的 Average和Max 擴展方法很明顯地不會從數據表中返回所有的數據行,它們會使用TSQL的聚合函數來計算數據庫中的值,然后只返回一個標量值)。

      請觀看我一月份制作的一個錄像,演示了LINQ到SQL如何顯著地改進了Orcas中的數據生產力。錄像中,你也可以看到新的LINQ to SQL的所見即所得ORM設計器的實戰示范,以及對數據模型編寫LINQ代碼時代碼編輯器提供的完整的 intellisense。

      posted on 2010-02-22 11:04  大寶pku  閱讀(619)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 亚洲电影天堂在线国语对白| 高潮潮喷奶水飞溅视频无码| 国产成人黄色自拍小视频| 看免费的无码区特aa毛片| 欧美日韩国产va在线观看免费 | 免费AV片在线观看网址| 久久人人爽爽人人爽人人片av| 4hu四虎永久在线观看| 东方av四虎在线观看| 国产仑乱无码内谢| 欧美亚洲国产一区二区三区 | 四虎成人精品永久免费av| 天堂亚洲免费视频| 一本色道久久加勒比综合| 午夜福利yw在线观看2020| 日韩一区二区三区理伦片| 精品人妻人人做人人爽| 国产在线亚州精品内射| 国产午夜福利视频在线| 亚洲人成在线观看| 国产老熟女国语免费视频| 日本一区二区三区专线| 丰满大爆乳波霸奶| 国产蜜臀av在线一区二区| 亚洲av男人电影天堂热app| 中国china露脸自拍性hd| 天堂中文8资源在线8| 亚洲免费成人av一区| 岐山县| 国内自产少妇自拍区免费| 国99久9在线 | 免费| 亚洲日韩欧洲乱码av夜夜摸| 欧美精品黑人粗大破除| 久久精品国产蜜臀av| 日本丰满的人妻hd高清在线 | 成av免费大片黄在线观看| 欧美疯狂三p群体交乱视频| 少妇又爽又刺激视频| 国产乱码精品一区二三区| 自拍视频在线观看三级| 国产av不卡一区二区|