类声明中关键字“where”的作用是什么?

时间:2010-04-29 18:39:22

标签: c#

我正在查看MvcContrib Grid的源代码,并看到声明为的类:

public class Grid<T> : IGrid<T> where T : class

where T : class位做什么?

7 个答案:

答案 0 :(得分:19)

这是generic type constraint

在这种情况下,它意味着泛型类型(T)必须是引用类型,即类,接口,委托或数组类型。

列出了其他约束here

您还可以将泛型类型约束为从特定类型(基类或接口)继承

答案 1 :(得分:3)

来自文档http://msdn.microsoft.com/en-us/library/d5x73970.aspx

其中T:class

type参数必须是引用类型;这也适用于任何类,接口,委托或数组类型。

答案 2 :(得分:3)

另一个例子是

public A<T> where T : AnInterface

其中AnInterface是接口类。这意味着,T必须实现此接口。

这些约束很重要,因此编译器知道对该类型有效的操作。例如,如果不告诉编译器类型提供的函数,就不能调用T的函数。

答案 3 :(得分:2)

它是对type参数的约束,它表示T可以是类或接口,但不能是枚举或结构。所以T必须是引用类型而不是值类型。

最诚挚的问候,
Oliver Hanappi

答案 4 :(得分:1)

答案 5 :(得分:1)

您可以对客户端代码在实例化类时将其用于类型参数的类型类型的限制称为Constraints on Type Parameters

例如:T:class

这里T是Type,type参数必须是引用类型;这也适用于任何类,接口,委托或数组类型。

答案 6 :(得分:1)

这是一种通用类型约束。它指定类型T必须是引用类型,即类而不是结构。