5

私は次のものを持っています:

public class Foo<T> : Goo
    where T: SomeClass<?>, new()

そんなこと知ってる ?は C# では本当のワイルドカードではありませんが、SomeClass が任意のクラスを引数として取ることができるように、これを C# で正しく記述するにはどうすればよいでしょうか? オブジェクトを使用しようとしましたが、「...からの暗黙的な参照変換はありません...」というエラーが表示されます。

ありがとう!

4

1 に答える 1

6

2 番目の型引数を指定する必要があります (つまりY、私のサンプルではY) T

public class Foo<T, Y> : Goo
    where T: SomeClass<Y>, new()

別のオプションは、ジェネリック クラスでのみ使用する必要がある場合は、2 番目のクラスのみを指定することです。コンパイラはデフォルトのコンストラクターがSomeClass<Y>あることを事前に知っているため、new() 制限は必要ありません。SomeClass<T>

public class Foo<Y> : Goo{
  public SomeClass<Y> Value;

  public void Setup() { Value = new SomeClass<Y>(); }
}
于 2012-09-29T02:13:19.457 に答える