いくつかの依存関係を実装しました (MVP パターンの一部です)。今、キャストを実行しようとすると、VS がエラーを通知します。
定義:
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の下)。