Jon*_*eet 10
好吧,你并没有真正将方法和属性附加到对象上.就CLR而言并非如此.你只是将项目分成字典,并在ExpandoObject实施IDynamicMetaObjectProvider中要求的属性值(或要求执行方法),它会采取相应的行动.
性能显然比静态绑定访问方法/属性要慢,但DLR非常糟糕.我个人担心的不是性能,而是因为缺乏类型安全性 - 如果没有编译器发现它,错误就会轻易搞砸你的代码.
我个人的建议是只在C#4中使用动态类型,它给出了非常明显的好处......我希望它比较少见(比如不安全的代码).
用途ExpandoObject?不是很多,IMO - 主要是在与其他动态语言交谈时.