プロジェクトに共変インターフェイスを追加しました。
interface IView
{
}
interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}
これらのインターフェースを実装して、いくつかのクラスを作成しました。
class TestView : IView
{
}
class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}
private void DoSomething()
{
}
}
そして、私はこれを問題なく使用できます:
IPresenter<IView> presenter = new TestPresenter();
したがって、すべてが正しいように見えるので、共分散の使用法が正しいと思います。残念ながら、私たちの単体テスト プロジェクトには、共変インターフェイスなど、同じプロジェクトにあるいくつかの型のプライベート アクセサーが含まれており、ビルド エラーが発生します。
型 'GenericInheritanceTest.IPresenter_Impl`1' をアセンブリ 'GenericInheritanceTest_Accessor、Version=0.0.0.0、Culture=neutral、PublicKeyToken=null' から読み込めませんでした。これは、共変または反変型パラメーターを宣言しており、インターフェイスでもデリゲートでもないためです。
ここでの問題は正確には何ですか?私の実装に失敗はありますか?これを修正するには?共変型を使用するとすぐにアクセサーを回避する必要があるということはできませんか??? この問題を解決するために特定の型のアクセサを作成しないようにすることは可能ですか?