私はより複雑な継承構造とジェネリックを理解しようとしており、このスーツに従っている現在のプロジェクトのアーキテクチャを作成しようとしています。私の問題は現在、次のエラーが発生していることです。
型引数 'Foo' は、制約型 'ListBase' から継承または実装していません
public class ItemBase {}
public class ListBase<T> where T : ItemBase
{
public virtual List<T> ListExample {get; set; }
}
これらは私の基本クラスですが、適切に名前が付けられていない可能性があります。私が達成しようとしていることの簡単な例を示してみました。
public class FooItem : ItemBase { }
public class Foo : ListBase<FooItem>
{
public override List<FooItem> ListExample { get; set;}
}
そのため、リストの初期基本クラスを拡張して、さらに多くのことを行うことができますが、これらすべてのクラスを汎用的に処理する方法が必要です。
public class ListHandler<T> where T : ListBase<ItemBase> { }
上記のエラーが発生するのFoo
を渡そうとすると、 is aおよびis のタイプであるため、必然的にthis を実行できると思いました。T
ListHandler
Foo
List<ItemBase>
FooItem
ItemBase
var handler = new ListHandler<Foo>();
なぜ私がこれを行うことができないのか、または私が間違っていることを誰かが説明できますか?