代码之家  ›  专栏  ›  技术社区  ›  Rasmus Faber

如何实现C_4的IDynamicObject接口?

  •  6
  • Rasmus Faber  · 技术社区  · 16 年前

    要在C 4.0中实现“方法缺失”(method missing)语义等,必须实现idynamicObject:

    public interface IDynamicObject
    {
      MetaObject GetMetaObject(Expression parameter);
    }
    

    据我所知,idynamicobject实际上是DLR的一部分,所以它不是新的。但我一直找不到关于它的很多文档。

    有一些非常简单的示例实现(f.x. here here 但是,是否有人能向我指出更完整的实现或一些真正的文档?

    尤其是,您应该如何处理“参数”-参数?

    5 回复  |  直到 16 年前
        1
  •  4
  •   Curt Hagenlocher    16 年前

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

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

    此外,为了与clr v2 system.core兼容,从beta 4或beta 5开始的Ironpython版本现在将系统命名空间中的所有内容重命名为Microsoft命名空间。

        2
  •  3
  •   Tobias Hertkorn    16 年前

    如果希望包含源代码的端到端示例生成一个动态对象,该对象在字典中存储任意属性的值,则 my post "A first look at Duck Typing in C# 4.0" 可能适合你。我写这篇文章是为了展示如何将动态对象强制转换为静态类型的接口。它有一个完整的工作实现,它是一个田园诗般的对象,可以像一个iquack。

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

        3
  •  2
  •   Mike Hadlow    16 年前

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

    http://mikehadlow.blogspot.com/2008/10/dynamic-dispatch-in-c-40.html

        4
  •  0
  •   Rasmus Faber    16 年前

    以下是迄今为止我所发现的:

    动态语言运行库当前作为 IronPython project . 所以这是获取信息的最佳地点。

    实现支持IDynamicObject的类的最简单方法似乎是从 Microsoft.Scripting.Actions.Dynamic 并重写相关方法,例如调用方法来实现函数调用语义。看起来Microsoft.scripting.actions.dynamic没有包含在CTP中,但是Ironpython2.0中的一个看起来可以工作。

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

        5
  •  0
  •   Rasmus Faber    16 年前

    本演示文稿还提供了有关DLR的大量信息:

    推荐文章