如何实现C#4';IDynamicObject接口?

如何实现C#4';IDynamicObject接口?,dynamic,c#-4.0,dynamic-language-runtime,idynamicobject,Dynamic,C# 4.0,Dynamic Language Runtime,Idynamicobject,要在C#4.0中实现“方法缺失”——语义等,您必须实现IDynamiObject: public interface IDynamicObject { MetaObject GetMetaObject(Expression parameter); } 据我所知,IDynamicObject实际上是DLR的一部分,所以它不是新的。但是我还没有找到很多关于它的文档 这里有一些非常简单的示例实现(f.x.和),但是有人能给我指出更完整的实现或一些真实的文档吗 特别是,您应该如何准确地处理“参数”

要在C#4.0中实现“方法缺失”——语义等,您必须实现IDynamiObject:

public interface IDynamicObject
{
  MetaObject GetMetaObject(Expression parameter);
}
据我所知,IDynamicObject实际上是DLR的一部分,所以它不是新的。但是我还没有找到很多关于它的文档

这里有一些非常简单的示例实现(f.x.和),但是有人能给我指出更完整的实现或一些真实的文档吗


特别是,您应该如何准确地处理“参数”-参数?

以下是我到目前为止得出的结论:

动态语言运行库当前作为的一部分进行维护。因此,这是获取信息的最佳场所

实现支持IDynamiObject的类的最简单方法似乎是派生并重写相关方法,例如调用方法以实现函数调用语义。CTP中似乎没有包含Microsoft.Scripting.Actions.Dynamic,但IronPython 2.0中的版本似乎可以使用


我仍然不清楚“参数”-参数的确切含义,但它似乎为动态对象的绑定提供了上下文。

本演示文稿还提供了许多关于DLR的信息:

  • 吉姆·胡古宁

    • 简而言之,元对象负责实际生成将在调用站点运行的代码。它使用的机制是LINQ表达式树,它在DLR中得到了增强。因此,它不是从一个对象开始,而是从一个表示该对象的表达式开始,最终需要返回一个描述要执行的操作的表达式树

      玩这个游戏时,请记住CTP中System.Core的版本是从8月底的快照中拍摄的。它与IronPython的任何特定测试版都不完全对应。自那时以来,对DLR进行了许多更改


      此外,为了与CLR v2 System.Core兼容,IronPython的发行版从beta 4或beta 5开始,现在将系统名称空间中的所有内容重命名为Microsoft名称空间中的所有内容。

      我刚刚在博客中介绍了如何做到这一点:


      如果您想要一个包含源代码的端到端示例,从而生成一个在字典中存储任意属性值的动态对象,那么它可能适合您。我写这篇文章是为了说明如何将动态对象转换为静态类型的接口。它有一个完整的鸭的工作实现,鸭是一个IDynamicObject,它的行为可能类似于IQuack


      如果您需要更多信息,请在我的博客上与我联系,我会尽我所能帮助您。

      每当我发布类似的内容,只是一篇文章(mire或其他人的)的链接时,我都会被否决。