我实现了一些依赖项(它们是MVP模式的一部分)。现在,当我尝试执行投射时,VS会通知有关错误。C#3.0隐含类和具有泛型类型的接口的转换错误
定义:
interface IView
{
void setPresenter(IPresenter<IView> presenter);
}
interface IViewA : IView
{
}
interface IPresenter<T> where T : IView
{
void setView(T view);
}
class PresenterA : IPresenter<IViewA>
{
}
隐式转换:
IPresenter<IView> presenter = new PresenterA();
编译错误: 无法隐式转换类型 'PresenterA' 到 'IPresenter'。一个显式转换存在(是否缺少强制转换?)
明确的转换:
IPresenter<IView> presenter = (IPresenter<IView>)new PresenterA();
运行时错误:InvalidCastException的
我怎样才能解决这个问题,以保持这一概念?泛型类型的概念(我的前一个没有它)。我已经尝试过其他帖子中提到的变异和逆变问题(进出),但也有错误(根据VS 2010)。
你不能,约束是没有意义的。 – millimoose 2013-02-08 18:58:28
哪个约束? IPresenter中包含的通用类型? – Bronek 2013-02-08 19:02:57
我去了它的细节,在[我的回答]例子(http://stackoverflow.com/a/14779661/41655)。 – millimoose 2013-02-08 19:10:41