dynamic - 你如何实现 C#4 的 IDynamicObject 接口(interface)?

标签 dynamic c#-4.0 dynamic-language-runtime idynamicobject

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

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

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

那里有一些非常简单的示例实现(f.x. herehere ),但是谁能指出我更完整的实现或一些真实的文档?

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

最佳答案

简短的回答是 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/

相关文章:

.net - 将 GridView 绑定(bind)到 Dynamic 或 ExpandoObject 对象

c# - C#中的冒号参数,冒号代表什么

c#-4.0 - 如何将 IList<SomeObject> 转换为 IList<ISomeInterface>,其中 SomeObject 使用 C# 4.0 中的协方差实现 ISomeInterface

c#-4.0 - 在 IDP 启动的 Web SSO 中使用 C# 和 .NET 4.5 创建 SAML 2.0 响应

asp.net - 作为 IronPython 执行用户输入的表达式是否安全

c++ - 在指向对象的动态指针数组上插入新元素

php - PHP 中的动态枚举。可能的?懂事吗?

c# - 使用 DLR 运行通过 CompileAssemblyFromSource 生成的代码?

具有 IronPython 类型参数的 C# 泛型

c++ - 动态连续数组