熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

詳解C# 4.0中的新對象ExpandoObject

2013-11-13 10:26:01  來源: .NET編程 

  文是介紹C#也就是NET中的一個新對象ExpandoObject希望通過對這個ExpandoObject類的介紹能幫助大家更好的理解NET

  今天無意中看了的一些新特性其中看到SystemDynamic 命名空間下的ExpandoObject 類很感興趣看了篇英文文章給大伙分享下

  先來看下該類的成員us/library/systemdynamicexpandoobject_members(VS)aspx

  ExpandoObject instances can add and remove members at run time什麼意思呢?這意味著此類的實例能夠在運行時動態的增加和刪除成員其中有個新概念dynamic language runtime (DLR)(動態語言運行時)我才疏學淺還希望各位專家們多去研究下

  說說ExpandoObject這個動態特性的意義吧我們用XML來做下對比

  首先我們創建一個XML對象

  XElement contactXML =      new XElement(Contact

  new XElement(Name Patrick Hines)

  new XElement(Phone )

  new XElement(Address

  new XElement(Street Main St)

  new XElement(City Mercer Island)

  new XElement(State WA)

  new XElement(Postal )

  )

  );

  再來看看Dynamic對象

  dynamic contact = new ExpandoObject();

  contactName = Patrick Hines;

  contactPhone = ;

  contactAddress = new ExpandoObject();

  contactAddressStreet = Main St;

  contactAddressCity = Mercer Island;

  contactAddressState = WA;

  contactAddressPostal = ;

  首先我們看下dynamic對象的聲明dynamic contact = new ExpandoObject();

  我沒有寫成 ExpandoObject contact = new ExpandoObject() 因為我用靜態的ExpandoObject 類型來聲明則此對象沒有在運行時增加成員的特性所以我使用新的關鍵字dynamic

  其次大家能注意到我創建一個子節點只需要創建一個ExpandoObject實例作為contact對象的成員 這樣你可以很簡單的看清父子節點之間的關系更重要的是你可以很簡單的訪問每一個元素

  用LINQ to XML

  ConsoleWriteLine((string)contactXMLElement(Address)Element(State));

  用 ExpandoObject對象  ConsoleWriteLine(contactAddressState);

  可是當你有很多個contact對象時該怎麼辦呢?呵呵看代碼Code//用XML 方式XElement contactsXML =    new XElement

  (Contacts        new XElement(Contact            new XElement(Name Patrick Hines)

  new XElement(Phone )        )

  new XElement(Contact              new XElement(Name Ellen Adams)

  new XElement(Phone )

  )

  );

  //用dynamic對象dynamic contacts = new List();

  contactsAdd(new ExpandoObject());

  contacts[]Name = Patrick Hines;

  contacts[]Phone = ;contactsAdd(new ExpandoObject());

  contacts[]Name = Ellen Adams;contacts[]Phone = ;

  再來看看用Linq to Object怎麼來操作dynamic吧

  var phones = from c in (contacts as List)where cName == Patrick Hinesselect cPhone;

  大家看了這個新特性有什麼感受呢?想不想立刻感受下C# ?不管怎麼樣我是很期待啦希望NET越來越強大~~


From:http://tw.wingwit.com/Article/program/net/201311/13603.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.