根据Anders的说法,在C#4.0中,我们将获得动态类型或“静态类型是动态的”对象。这将允许任何方法调用解析在运行时而不是编译时发生。但是,是否有设施将动态对象绑定到某种合同上(从而也可以获得完整的智能感知),而不是允许对它进行任何调用,即使你知道它不可能有效。

即。而不只是

dynamic foo = GetSomeDynamicObject();

能够转换或转换它以将其约束为已知合约,例如

IFoo foo2 = foo.To<IFoo>;

甚至只是

IFoo foo2 = foo as IFoo;

在C#4.0的现有材料中找不到类似的东西,但它似乎是动态范例的逻辑扩展。有更多信息的人?

有帮助吗?

解决方案

我不知道有什么东西真的像鸭子打字,我很害怕。我关于这个想法的博客,但我不指望任何支持。使用Reflection.Emit创建一个将生成任何给定接口的实现的类,在构造函数中获取动态对象并将每个调用代理通过它可能不会太难。不理想,但它可能是一个权宜之计。

其他提示

这是一个很酷的主意。 如果我理解你,那么你正在描述/提出CLR的一个功能,当你尝试将动态对象转换为接口时,它应该查看动态对象支持哪些方法/属性,看看它是否具有有效实现该接口。然后CLR将负责对象的“实现IFoo”,因此您可以将动态对象转换为IFoo。 几乎可以肯定,这将不会得到支持,但这是一个有趣的想法。

Tobias Hertkorn通过链接回复了我的问题此处他的 blogpost 显示了如何在MetaObject上使用Convert()方法返回动态代理的示例。看起来非常很有希望。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top