5

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

即,而不仅仅是

dynamic foo = GetSomeDynamicObject();

有能力对其进行转换或转换以将其限制为已知的合同,例如

IFoo foo2 = foo.To<IFoo>;

甚至只是

IFoo foo2 = foo as IFoo;

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

4

3 回答 3

2

恐怕我不知道有什么真正类似于鸭子打字的东西。我已经在博客上介绍了这个想法,但我不希望得到任何支持。使用 Reflection.Emit 来创建一个类可能不会太难,该类将生成任何给定接口的实现,在构造函数中获取一个动态对象,并将每个调用代理到它。不理想,但它可能是一个权宜之计。

于 2008-11-03T21:14:01.807 回答
1

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

于 2008-11-03T21:44:21.120 回答
1

Tobias Hertkorn在这里回答了我的问题,他的博客文章链接显示了如何在 MetaObject 上使用 Convert() 方法返回动态代理的示例。它看起来很有希望。

于 2008-11-04T08:29:46.653 回答