4

次の問題があります。

public class MyClass<T> where T : class
{
    private MyOtherClass<T, U> variable where U : class;
    ... content ...
}
public class MyOtherClass<T, U> where T : class where U : class
{
    ... content ...
}

それはどういうわけか可能ですか?

4

3 に答える 3

3

MyClassある型パラメータに基づいてジェネリックのフィールドまたはプロパティの型を作成する場合はU、それを型パラメータとして宣言する必要がありますMyClass

public class MyClass<T, U> 
    where T : class 
    where U : class
{
    private MyOtherClass<T, U> variable;
    ... content ...
}
public class MyOtherClass<T, U>
    where T : class 
    where U : class
{
    ... content ...
}

ただし、メソッドには適用されません。これはまったく問題ありません。

public class MyClass<T> 
    where T : class 
{
    private MyOtherClass<T, U> Method<U>() where U : class
    {
        ... content ...
    }
}
于 2013-07-20T02:19:46.790 に答える
1

両方が一致する場所MyClass<T>への参照を含めたいようですが、すべてが受け入れられます。これがあなたがやろうとしていることである場合、ジェネリックパラメーターを持つメソッドではユーザーが指定する必要があるため、既存の回答はおそらく役に立ちません。MyOtherClass<T, U>TUUU

型パラメーター (特に複数のもの) を持つクラスは、このような状況をサポートするために、一般的でないものを継承 / 実装する必要があります。例えば:

public interface IOtherThing<T> {
    T Value1 { get; }
    object Value2 { get; }
}

public class MyOtherClass<T, U> : IOtherThing<T> {
    public T Value1 { get { ... } }
    public U Value2 { get { ... } }
    object IOtherThing<T>.Value2 { get { return Value2; } }
}

これで、任意の に割り当てることができるMyClass<T>として変数を宣言できます。IOtherThing<T>MyOtherClass<T, U>

于 2013-07-20T03:22:25.410 に答える