18

ネストされたジェネリッククラスがあるとします。

public class A<T> {
    public class B<U> { }
}

ここでtypeof(A<int>.B<>)は、本質的に、最初のパラメーターのみがバインドされている2つのパラメーターを持つジェネリッククラスです。

2つのパラメータを持つ単一のクラスがある場合

public class AB<T, U> { }

「開いたまま」ABを参照する方法はありT=intますか?Uそうでない場合、これはC#の制限ですか、それともCLRの制限ですか?

4

2 に答える 2

10

どうやらそれはC#では実行できないので、両方の型パラメーターを指定するか、何も指定しない必要があります。

また、CLRでもサポートされていないようで、同じタイプA<int>.B<>A<string>.B<>参照しています。

Type t1 = typeof(A<int>).GetNestedType("B`1");
Type t2 = typeof(A<string>).GetNestedType("B`1");
// t1.Equals(t2) is true

両方の型の囲み型はA<>(オープンジェネリック型)です。

編集:さらなるテストは、typeof(A<int>.B<string>)実際には、ネストされたジェネリック型のアリティ1ではなく、ジェネリック型のアリティ2であることを示しています...とをtypeof(A<int>.B<string>).GetGenericArguments()含む配列を返します。したがって、実際にはサポートされていない、と同等になります(ジェネリック型は部分的に閉じることはできません)typeof(int) typeof(string)typeof(A<int>.B<>)(A.B)<int, >

于 2011-04-08T23:52:24.713 に答える
3

これはあなたが考えていることですか?

   class AB<T, U>
   {
      protected T t;
      U u;
   }

   class C<U> : AB<int, U>
   {
      public void Foo()
      {
         t = 5;
      }
   }
于 2011-04-08T23:47:47.923 に答える