根据Anders的说法,在C#4.0中,我们将获得动态类型或“静态类型是动态的”对象。这将允许任何方法调用解析在运行时而不是编译时发生。但是,是否有设施将动态对象绑定到某种合同上(从而也可以获得完整的智能感知),而不是允许对它进行任何调用,即使你知道它不可能有效。
即。而不只是
dynamic foo = GetSomeDynamicObject();
能够转换或转换它以将其约束为已知合约,例如
IFoo foo2 = foo.To<IFoo>;
甚至只是
IFoo foo2 = foo as IFoo;
在C#4.0的现有材料中找不到类似的东西,但它似乎是动态范例的逻辑扩展。有更多信息的人?
答案 0 :(得分:2)
我不知道有什么东西真的像鸭子打字,我害怕。我blogged about the idea,但我不指望任何支持。使用Reflection.Emit创建一个类,它将生成任何给定接口的实现,在构造函数中获取动态对象并将每个调用代理到它,这可能不会太难。不理想,但它可能是一个权宜之计。
答案 1 :(得分:1)
这是一个很酷的主意。 如果我理解你,那么你正在描述/提出CLR的一个功能,当你尝试将动态对象转换为接口时,它应该查看动态对象支持哪些方法/属性,看看它是否具有有效实现该接口。然后CLR将负责对象的“实现IFoo”,因此您可以将动态对象转换为IFoo。 几乎可以肯定,这将不会得到支持,但这是一个有趣的想法。
答案 2 :(得分:1)