使用class&new()关键字的通用方法

Nit*_*aul 2 c#

 public class ViewModelBaseEx<T> : ViewModelBase where T : class, new()
 {
      //...........
 }
Run Code Online (Sandbox Code Playgroud)

我在一个样本中找到了这样一个类.在这个类中,"T:class,new()"部分的含义是什么.这个方法定义中class,new()的用法是什么.

xan*_*tos 9

这意味着,T必须是引用类型(通常为class,interface,delegate或阵列)(但不是struct),它必须有一个公共的无参数构造函数T()(所以这将排除所有的除了前面class).


Sim*_*ead 6

它是泛型类型约束.

它指定无论T是什么,它必须是引用类型(a class),并且它必须具有公共默认无参数构造函数(new()).

这允许人们这样做:

var x = new T();
Run Code Online (Sandbox Code Playgroud)

没有new()约束,这是不可能的.