WEB开发网
开发学院软件开发C语言 C# 4 中的 Expando 对象 阅读

C# 4 中的 Expando 对象

 2010-09-30 22:46:55 来源:WEB开发网   
核心提示: 函数将返回一系列动态定义的对象,通过 LINQ-to-XML,C# 4 中的 Expando 对象(6),您可以解析出标记中的节点,并为每个节点创建一个 ExpandoObject 实例,添加或修改成员时,该类就会引发一个 PropertyChanged 事件,<Person> 下的

函数将返回一系列动态定义的对象。通过 LINQ-to-XML,您可以解析出标记中的节点,并为每个节点创建一个 ExpandoObject 实例。<Person> 下的每个节点的名称都会成为 Expando 对象的一个新属性。属性值是节点的内部文字。基于 XML 内容,您得到了一个 Expando 对象,其 FirstName 属性设置为 Dino。

然而,在图 3 中,您可以看到一个索引器语法,用于填充 Expando 对象。这还需要做进一步的解释。

在 ExpandoObject 类中

ExpandoObject 类位于 System.Dynamic 命名空间中,在 System.Core 程序集中定义。ExpandoObject 代表一个对象,该对象的成员可以在运行时动态添加或删除。该类是密封的,并且可以实现多个接口:

public sealed class ExpandoObject : 
 IDynamicMetaObjectProvider, 
 IDictionary<string, object>, 
 ICollection<KeyValuePair<string, object>>, 
 IEnumerable<KeyValuePair<string, object>>, 
 IEnumerable, 
 INotifyPropertyChanged;

正如您看到的,该类使用了多个可枚举接口,包括 IDictionary<String, Object> 和 IEnumerable,来提供其内容。此外,它还实现了 IDynamicMetaObjectProvider。这是一个标准接口,能够让某个对象在动态语言运行时 (DLR) 内由依照 DLR 互操作性模型编写的程序共享。换句话说,只有实现 IDynamicMetaObjectProvider 接口的对象能够跨 .NET 动态语言共享。例如,Expando 对象可被传递到 IronRuby 这样的组件。如果使用常规的 .NET 托管对象,就无法轻易做到这一点。或许您可以,但不会获得动态行为。

ExpandoObject 类还实现了 INotifyPropertyChanged 接口。这样,添加或修改成员时,该类就会引发一个 PropertyChanged 事件。支持 INotifyPropertyChanged 接口对于在 Silverlight 和 Windows Presentation Foundation 应用程序前端使用 Expando 对象至关重要。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Expando 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接