这样有一个泛型类 XXValue ,其中Type T可以是值类型或引用类型,例如int,string,struct object
public class XXValue<T>
{
public T DefaultValue;
}
还有另一个通用类 XXAttribute
public class XXAttribute<T>
{
public T Value;
}
但 XXAttribute 的类型T应该是类型 XXValue 的类或子类,因此如何编写 where 语句为的 XXAttribute ?哪一个是正确的?
public class XXAttribute<T> where T : XXValue<T>
public class XXAttribute<VT, AT> where AT : XXValue<VT>
答案 0 :(得分:2)
但是XXAttribute的类型T应该是XXValue类的类或子类
鉴于这一说法,它应该是第二个。
public class XXAttribute<TBase, T> where T : XXValue<TBase>
{
public T Value;
}
这指定XXAttribute
的类型参数应继承自XXValue
。但由于XXValue
也是通用类型,因此您还需要在XXAtribute
中指定其类型参数,并将其作为TBase
传递,并将其传递。
或者(给出问题的范围很难说,但你可以)改变Value
的定义方式:
public class XXAttribute<TBase>
{
public XXValue<TBase> Value;
}
答案 1 :(得分:0)
第二个是正确的,否则编译器知道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>>();