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

13

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

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

where T : class 是什么意思?


2
可能是 https://dev59.com/T3VC5IYBdhLWcg3wpjB8 的重复问题。 - Jon Seigel
2
@Jon Seigel - 绝对不是那个问题的副本。 - Oded
7个回答

20

这是一个通用类型约束

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

其他约束可在此处列出。

您还可以将泛型类型限制为继承自特定类型(基类或接口)。


3
不,这与从对象派生无关。它可以是接口或委托,例如。 - Gabe

4
另一个例子可能是:
public A<T> where T : AnInterface

这句话中的AnInterface是一个接口类。这意味着T必须实现这个接口。

这些限制非常重要,这样编译器才能知道该类型可用的操作。例如,如果不告诉编译器该类型所提供的函数,就无法调用T的函数。


3

2

这是一个关于类型参数的限制条件,它说明T只能是类或接口,不能是枚举或结构体。因此,T必须是引用类型而不是值类型。

祝好!
Oliver Hanappi



1

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

例如:where T : class

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


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接