0

このジェネリック クラスを検討してください。

class TList<T> : System.Collections.Generic.List<T> {
}

これらのリストを含む別のジェネリック リスト クラスがあり、それらのメンバーで作業する必要がある場合があります。

class TListList<U, T> : System.Collections.Generic.List<U> where U : TList<T>
{
   public void Foo() {
      foreach(U list in this) {
        T bar = list[0];
      }
   }
}

そして、ここに具体的な実装があります:

class FooList : TList<Foo> {}
class FooListList : TListList<FooList, Foo> {}

私がやりたいは、の仕様で T 型パラメーターを削除しTListList、コンパイラーにwhere句でそれを認識させ、のメンバーが利用できるようにすることですTListList

class TListList<U> where U : TList<T> { ...same Foo() as above... }

class FooList : TList<Foo> {}
class FooListList : TListList<FooList> {}

これは可能で、間違った方法で行っているだけですか、それとも言語がこれに対応していないだけですか?

4

1 に答える 1

1

いいえ、これは不可能です。個別のジェネリック型はそれぞれ事前に宣言する必要があります -- thenは宣言されていない識別子であるためT、 listで省略することはできません。<U, T>T

(また、あなたはこれを知っていると確信していますが、から継承することList<>は非常に悪いことです。IList<>代わりに実装し、実装に委譲してください。)

于 2012-09-20T21:06:50.367 に答える