"where"在C#类声明中的含义是什么?

Mat*_*tin 18 .net c# generics

我试图谷歌这个,但我能找到的只是普通类声明的文件.

public class DataContextWrapper<T> : IDataContextWrapper where T : DataContext, new()
{

}
Run Code Online (Sandbox Code Playgroud)

我看到该类实现了IDataContextWrapper,它继承自DataContext,并且根据它的实例化方式随T类而变化.

我不知道where T"或" 是什么, new()意思.

Cod*_*aos 37

它是一个通用约束,并限制可以传递给泛型参数的类型.

在您的情况下,它要求TDataContext默认的或派生的,并且具有默认(无参数)构造函数(new()约束).

您需要通用约束来实际使用泛型类型执行非常简单的操作.

  • new()约束允许您创建一个实例new T().
  • DataContext约束允许你调用的方法DataContext上的一个实例T

MSDN写道:

where T : <base class name> type参数必须是或从指定的基类派生.

where T : new() type参数必须具有公共无参数构造函数.与其他约束一起使用时,必须最后指定new()约束.


Tim*_*mbo 13

仅允许从派生或实现DataContext的类型T,并且具有不带参数的公共构造函数.


Ode*_*ded 9

它是泛型类型约束,并指定泛型类型的约束(例如,只有类,或必须实现特定的接口).

在这种情况下,T必须是一个DataContext或者从其继承并且必须具有无参数公共构造函数(new()约束)的类.


Mat*_*ogg 5

这是一种通用类型限制.在这种情况下,T必须从DataContext继承,并且是一个带有不带参数的构造函数的类型.

  • 它不一定是参考类型.`new()`也适用于结构体. (3认同)

Tom*_*son 5

where关键字用于约束您的泛型类型变量,在您的情况下,这意味着该类型T必须是 aDataContext并且必须包含一个公共默认构造函数。