例如,
interface IMyInterface
{
bool Visible
{
get;
}
}
TextBox myTextBox = new TextBox();
IMyInterface i = (dynamic<IMyInterface>)myTextBox;
对于已知类型,可以在编译时实现此操作,对于使用dynamic声明的实例,则可以在运行时实现。接口定义已知,类型也已知(在此示例中),因此编译器可以确定对象是否支持由接口定义的调用,并为我们执行一些魔法以进行转换。
我猜想C#4不支持这个(我找不到相关的参考资料),但我想确切地知道。如果它不支持,我想讨论它是否应该包含在将来的语言版本中,以及支持和反对的理由。对我来说,这似乎是一个很好的补充,可以在不必创建全新的类型来包装现有框架类型的情况下实现更大的多态性。
更新 以防有人指责我剽窃,我不知道Jon Skeet已经提出了这个建议。然而,很高兴知道我们想到了非常相似的语法,这表明它可能至少是直观的。同时,“拥有原创性的想法”仍然是我的待办事项之一。