Jon*_*vis 7 c# .net-4.0 c#-4.0
我不明白,为什么我可以使用ExpandoObject时使用动态MethodBags?我在这里错过了什么?
MethodBags和类似的实现往往有一些限制.如果您发现自己遇到这些障碍,可能更容易实现自己的类.特别:
难以在方法包中实现状态.(表达式树不能包含静态类型化的对象dynamic;没有良好的语法来创建依赖于同一动态对象上的内部状态的方法.)
只能添加公共方法.没有虚拟,私有,受保护或抽象的方法.
无法实现接口.
相比之下,ExpandoObjects是真正的类,更丰富,功能更全面.它们更接近于模仿你在Ruby或Python中免费获得的东西.
快速说明:对于那些不知道的人,动态方法包是一种动态添加方法到对象的技术.比尔·瓦格纳形容这里的源代码在这里.
简单的答案是MethodBag概念只是向您展示一种技术.您绝对可以使用ExpandoObject来执行此操作,但有时您可能希望编写自己继承的类System.Dynamic.DynamicObject.这方面的一个示例可能是提供动态JSON,YAML或XML对象,它允许您以点属性符号而不是传统的字符串方式引用数据.如果继承自DynamicObject,您可能会发现要为类添加动态函数.MethodBag技术向您展示了如何做到这一点.ExpandoObject只是实现此技术的类的一个示例.ExpandoObject将满足您所需要的95%,而MethodBag技术将向您展示如何在您决定为最后5%执行此操作时自定义自己编写.