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

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

public class Grid : IGrid where T : class 

where T : class位的作用是什么?

它是generics类型约束 。

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

此处列出了其他约束。

您还可以将generics类型约束为从特定类型(基类或接口)inheritance

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

哪里T:上课

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

另一个例子是

 public A where T : AnInterface 

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

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

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

最好的祝福,
奥利弗哈纳皮

它将T限制为引用类型,包括任何类,接口,委托或数组类型 。

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

您可以对客户端代码在实例化类时参数可以用于类型参数的类型的类型应用限制被称为类型参数上的约束

例如:T:class

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