我實現了一些依賴項(它們是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