在C#中定义有界泛型类型参数

时间:2012-03-29 20:44:20

标签: c# generics clr bounded-types

在java中,可以绑定泛型类型的类型参数。可以这样做:

class A<T extends B>{
...
}

因此,此通用类A的类型参数应为B或B的子类。

我想知道C#是否有类似功能。如果有人让我知道,我很感激。

谢谢,

4 个答案:

答案 0 :(得分:18)

C#中的相同内容是:

class A<T> where T : B
{

}

另请参阅"Constraints on Type Parameters"(msdn),了解一般约束的概述。

答案 1 :(得分:9)

非常相似:

public class A<T> where T : B
{
    // ...
}

这可以用来将T约束为B的子类或实现(如果B是接口)。

此外,您可以将T约束为引用类型,值类型或要求默认构造函数:

where T : class     // T must be a reference type
where T : struct    // T must be a value type
where T : new()     // T must have a default constructor

答案 2 :(得分:3)

当然你可以:

class A<T> where T: B
{
    // ...
}

答案 3 :(得分:3)

是的,你可以这样做,它被称为类型约束。这篇文章解释了如何:

http://msdn.microsoft.com/en-us/library/d5x73970.aspx