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