详解C# 4.0中的新对象ExpandoObject

开发 后端
本文我们将介绍C# 4.0中的新对象ExpandoObject,这个类的实例能够在运行时动态的增加和删除成员。

本文是介绍C#4.0中,也就是.NET4.0中的一个新对象ExpandoObject,希望通过对这个ExpandoObject类的介绍,能帮助大家更好的理解.NET4.0。

今天无意中看了4.0的一些新特性,其中看到SystemDynamic 命名空间下的ExpandoObject 类很感兴趣,看了篇英文文章给大伙分享下。

先来看下该类的成员:http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject_members(VS.100).aspx

ExpandoObject instances can add and remove members at run time.什么意思呢?这意味着此类的实例能够在运行时动态的增加和删除成员。其中有个新概念:dynamic language runtime (DLR)(动态语言运行时),我才疏学浅,还希望各位专家们多去研究下。

说说ExpandoObject这个动态特性的意义吧。我们用XML来做下对比:

首先我们创建一个XML对象,

  1. XElement contactXML =  
  2.     new XElement("Contact",  
  3.         new XElement("Name""Patrick Hines"),  
  4.         new XElement("Phone""206-555-0144"),  
  5.         new XElement("Address",  
  6.             new XElement("Street1""123 Main St"),  
  7.             new XElement("City""Mercer Island"),  
  8.             new XElement("State""WA"),  
  9.             new XElement("Postal""68042")  
  10.         )  
  11.     ); 

再来看看Dynamic对象,

  1. dynamic contact = new ExpandoObject();  
  2. contact.Name = "Patrick Hines";  
  3. contact.Phone = "206-555-0144";  
  4. contact.Address = new ExpandoObject();  
  5. contact.Address.Street = "123 Main St";  
  6. contact.Address.City = "Mercer Island";  
  7. contact.Address.State = "WA";  
  8. contact.Address.Postal = "68402"

首先,我们看下dynamic对象的声明:dynamic contact = new ExpandoObject();

我没有写成 ExpandoObject contact = new ExpandoObject(), 因为我用静态的ExpandoObject 类型来声明则此对象没有在运行时增加成员的特性,所以我使用新的关键字dynamic.

其次,大家能注意到,我创建一个子节点只需要创建一个ExpandoObject实例作为contact对象的成员。 这样你可以很简单的看清父子节点之间的关系,更重要的是你可以很简单的访问每一个元素。

用LINQ to XML:

  1. Console.WriteLine((string)contactXML.Element("Address").Element("State"));用 ExpandoObject对象:  
  2. Console.WriteLine(contact.Address.State);可是,当你有很多个contact对象时该怎么办呢?呵呵,看代码:Code//用XML 方式:XElement contactsXML =    new XElement  
  3. ("Contacts",        new XElement("Contact",            new XElement("Name""Patrick Hines"),   
  4.  new XElement("Phone""206-555-0144")        ),        new XElement("Contact",              
  5. new XElement("Name""Ellen Adams"),              
  6. new XElement("Phone""206-555-0155")        )    );//用dynamic对象:dynamic contacts = new List();  
  7. contacts.Add(new ExpandoObject());  
  8. contacts[0].Name = "Patrick Hines";  
  9. contacts[0].Phone = "206-555-0144";contacts.Add(new ExpandoObject());  
  10. contacts[1].Name = "Ellen Adams";contacts[1].Phone = "206-555-0155";  
  11. 再来看看用Linq to Object怎么来操作dynamic吧,  
  12.  var phones = from c in (contacts as List)
                 where c.Name == "Patrick Hines"
                 select c.Phone;

大家看了这个新特性有什么感受呢?想不想立刻感受下C# 4.0?不管怎么样我是很期待啦。。希望.NET越来越强大~~

原文标题:C# 4.0 新对象ExpandoObject

链接:http://www.cnblogs.com/417533880/archive/2009/10/19/1585981.html

【编辑推荐】

  1. C#数组基础介绍与操作详解
  2. 浅析C#数组初始化性能测试
  3. C#数组操作详细剖析
  4. 浅析C#数组操作方法
  5. C#数组和串操作经验总结
责任编辑:彭凡 来源: 博客园
相关推荐

2009-08-19 16:51:14

C# 4.0 dyna

2009-05-26 09:28:22

C# 4.0dynamic动态类型

2009-08-13 09:46:49

C#历史C# 4.0新特性

2009-03-10 13:51:36

编译器VS2010C#

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud

2009-06-03 14:50:17

C# 4.0泛型协变性

2011-01-14 10:27:18

C#.netasp.net

2009-01-19 10:26:02

C#Namespace.NET

2010-08-17 09:57:39

C#

2009-08-03 18:24:28

C# 4.0协变和逆变

2009-08-03 11:32:49

C#调用COM对象

2009-05-08 09:46:37

微软C#集合对象

2009-02-03 09:33:26

动态类型动态编程C# 4.0

2024-04-03 00:10:24

C#System数据

2011-03-30 08:27:48

C#

2010-01-05 09:26:13

.NET 4.0

2010-05-25 08:34:10

C# 4.0

2009-07-06 11:00:56

.NET 4.0新特性.NET

2024-03-19 14:18:48

C#后端编程

2009-08-03 15:06:43

C# Stack对象C# Queue对象
点赞
收藏

51CTO技术栈公众号