0

有一个像这样的泛型类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类型的类或子类,那么XXAttribute的where语句 怎么写?哪一个是正确的?

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

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

2 回答 2

2

但是 XXAttribute 的类型 T 应该是 XXValue 类型的类或子类

鉴于此声明,它应该是第二个。

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

这指定了类型参数XXAttribute应该继承自XXValue. 但是由于XXValue它也是泛型类型,因此您还需要在as中指定类型参数,并将其传递。XXAtributeTBase


或者(鉴于问题的范围很难说,但你可以)改变Value定义方式:

public class XXAttribute<TBase>
{
    public XXValue<TBase> Value;
}
于 2012-12-04T05:26:57.903 回答
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>>();
于 2012-12-04T05:31:07.310 回答