0

のような一般的なパラメーターをネストすることは可能class MyClass<TG<TM>>{}ですか?

いくつかの方法を試してみたところ、次のコードが機能しましたが、クラス宣言では 2 つのパラメーターを分離して受け取る必要があります。

class MyClass1<TG, TM>
    where TM : MyType
    where TG : OtherType<TM> {

    public TM DoSomething() {
    }

    public TG DoSomething2() {
    }
}

それが唯一の方法ですか?

編集:

ご覧のとおり、クラス内に 2 つの汎用パラメーター (TM と TG の両方を使用するメンバー) が必要なので、TG は汎用パラメーターであり、型にすることはできません (その場合)。 2 つのパラメーターの 1 つをハードコードすることは、この質問には寄与しません。

さて、上記のサンプルでは、​​次のように使用できます (そして動作します):

new MyClass<A<B>, B>();

私の場合、2 番目のパラメーターは常に、最初のパラメーターのネストされたパラメーターと同じものを使用します。そこで、2 番目のパラメーターを省略できるかどうかを尋ねたところ、コンパイラーは最初のパラメーターのパラメーターからそれを推測しました。

2 つの別々のパラメーターを持つ代わりに、そのようなことは可能ですか?

4

1 に答える 1

2

それはあなたが何を達成したいかによります。2 つの異なるジェネリック パラメーターが必要な場合MyClass1は、示したコードが適しています。

class MyClass<TG<TM>>{}: これは実際にMyClassは、一般的な引数があることを意味します。そして、 を渡しています。これは、ジェネリック パラメータとして受け取るジェネリック クラスでもTG<TM>あることを意味します。TGTM

したがって、そのコードを機能させるには、次のものが必要です。

class TM {}
class TG<T> {}
class MyClass<T> {}

これで、次のように呼び出すことができます。

new MyClass<TG<TM>>();
于 2013-01-30T17:54:05.890 に答える