0

このような汎用クラスXXValueがあり、型 T は値型または参照型 (int、string、struct オブジェクトなど) にすることができます。

public class XXValue<T>
{
   public T DefaultValue;
}

そして、別の汎用クラスXXAttributeがあります

public class XXAttribute<T>
{
   public T Value;
}

しかし、 XXAttribute の型 T は、型XXValueクラスまたはサブクラス でなければなりませ。どちらが正しいですか?

public class XXAttribute<T> where T : XXValue<T>

public class XXAttribute<VT, AT> where AT : XXValue<VT>
4

2 に答える 2

2

ただし、XXAttribute の型 T は、型 XXValue のクラスまたはサブクラスである必要があります。

このステートメントを考えると、それは2番目のものになるはずです。

public class XXAttribute<TBase, T> where T : XXValue<TBase>
{
    public T Value;
}

これは、 の型パラメータがXXAttributeから継承する必要があることを指定しますXXValue。ただし、XXValueもジェネリック型であるため、その型パラメーターをXXAtributeas にも指定しTBaseて渡す必要があります。


または(質問の範囲を考えるとわかりにくいですが、おそらく可能です)のValue定義方法を変更します。

public class XXAttribute<TBase>
{
    public XXValue<TBase> Value;
}
于 2012-12-04T05:26:57.903 に答える
0

2番目は正しいでしょう。そうしないと、コンパイラがTの値を知るのが混乱します。ここで、一方ではTでありXXValue<T>、他方ではTはintです。

public class XXAttribute<V, T> where T : XXValue<V>
{
    public T Value;
}

使用法:

XXAttribute<int, XXValue<int>> attr = new XXAttribute<int, XXValue<int>>();
于 2012-12-04T05:31:07.310 に答える