要在 C# 4.0 中实现“方法缺失”语义等,您必须实现 IDynamicObject:
public interface IDynamicObject
{
MetaObject GetMetaObject(Expression parameter);
}
据我所知,IDynamicObject 实际上是 DLR 的一部分,所以它不是新的。但是我还没有找到很多关于它的文档。
那里有一些非常简单的示例实现(f.x. here 和 here ),但是谁能指出我更完整的实现或一些真实的文档?
特别是,您应该如何处理“参数”参数?
最佳答案
简短的回答是 MetaObject 负责实际生成将在调用站点运行的代码。它使用的机制是 LINQ 表达式树,它在 DLR 中得到了增强。所以它不是从一个对象开始,而是从一个表示对象的表达式开始,最终它需要返回一个描述要采取的 Action 的表达式树。
玩这个时,请记住 CTP 中的 System.Core 版本是从 8 月底的快照中获取的。它与 IronPython 的任何特定测试版都不是完全对应。从那时起,DLR 已经进行了许多更改。
此外,为了与 CLR v2 System.Core 兼容,从 beta 4 或 beta 5 开始的 IronPython 版本现在将 System 命名空间中的所有内容重命名为 Microsoft 命名空间。
关于dynamic - 你如何实现 C#4 的 IDynamicObject 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/245975/