如何实现 C#4 的 IDynamicObject 接口?
-
05-07-2019 - |
解决方案
简短的回答是,MetaObject负责实际生成将在呼叫站点运行的代码。它用于此的机制是LINQ表达式树,它在DLR中得到了增强。因此,它不是从一个对象开始,而是从一个表示对象的表达式开始,最终需要返回一个描述要采取的动作的表达式树。
使用此功能时,请记住CTP中的System.Core版本是在8月底从快照中获取的。它与IronPython的任何特定测试版都不完全对应。自那时起,对DLR进行了一些改动。
此外,为了与CLR v2 System.Core兼容,从beta 4或beta 5开始的IronPython版本现在将System命名空间中的所有内容重命名为Microsoft命名空间。
其他提示
如果你想要一个包含源代码的端到端样本,导致一个动态对象存储一个Dictionary中任意属性的值,那么我的帖子”A first看看C#4.0中的Duck Typing 可能适合你。我写了这篇文章,展示了如何将动态对象转换为静态类型的接口。它有一个完整的鸭子工作实现,它是一个IDynamicObject,可能就像一个IQuack。
如果您需要更多信息,请在我的博客上与我联系,我会尽我所能帮助您。
我刚刚在这里写了关于如何做到这一点的博客:
http://mikehadlow.blogspot.com /2008/10/dynamic-dispatch-in-c-40.html
这是我到目前为止所知道的:
动态语言运行时目前作为 IronPython项目的一部分进行维护。所以这是获取信息的最佳地点。
实现支持IDynamicObject的类的最简单方法似乎是从 Microsoft.Scripting.Actions.Dynamic 并覆盖相关方法,例如Call-method来实现函数调用语义。看起来像Microsoft.Scripting.Actions.Dynamic还没有包含在CTP中,但IronPython 2.0中的那个看起来会起作用。
我仍然不清楚“参数”参数的确切含义,但它似乎为动态对象的绑定提供了上下文。
本演示还提供了有关 DLR 的大量信息:
- 深潜:Microsoft .NET 中的动态语言 作者:吉姆·胡古宁。