我不是指将更低的接口或基类转换为更多派生类的意义上的动态转换,我的意思是采用我创建的接口定义,然后动态地向该接口转换不是从该接口派生的不同对象接口但支持所有呼叫.
例如,
interface IMyInterface
{
bool Visible
{
get;
}
}
TextBox myTextBox = new TextBox();
IMyInterface i = (dynamic<IMyInterface>)myTextBox;
Run Code Online (Sandbox Code Playgroud)
这可以在编译时针对已知类型实现,而运行时针对使用dynamic声明的实例实现.接口定义是已知的,类型(在此示例中)也是如此,因此编译器可以确定对象是否支持接口定义的调用,并为我们执行一些魔术以进行转换.
我的猜测是C#4不支持这个(我无法找到它的引用),但我想知道肯定.如果不是,我想讨论它是否应该包含在该语言的未来变体中,以及支持和反对的原因.对我来说,似乎是一个很好的补充,可以在代码中实现更大的多态性,而无需创建全新的类型来包装现有的框架类型.
更新
以免有人指责我抄袭,我不知道Jon Skeet已经提出过这个问题.但是,很高兴知道我们想到了非常相似的语法,这表明它至少可能是直观的.与此同时,"有一个独创性的想法"仍然在我的清单上再次出现.