次の問題があります。
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 ...
}
それはどういうわけか可能ですか?
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 ...
}
}
両方が一致する場所MyClass<T>
への参照を含めたいようですが、すべてが受け入れられます。これがあなたがやろうとしていることである場合、ジェネリックパラメーターを持つメソッドではユーザーが指定する必要があるため、既存の回答はおそらく役に立ちません。MyOtherClass<T, U>
T
U
U
U
型パラメーター (特に複数のもの) を持つクラスは、このような状況をサポートするために、一般的でないものを継承 / 実装する必要があります。例えば:
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>