对C#泛型中的new()约束的一点思考
对于new()约束,您可能会有一个误解,认为使用新约束后,对象创建与非通用版本一致:
public class Tester
其中T:new()
{
public Tester()
{
T = new T();//相当于非泛型版本的new?例如object o = new object();?
}
私人T t
}
实际上,使用new关键字的作用只是让编译器检查绑定的泛型参数是否有一个无参数的构造函数,在这个构造函数中泛型被实例化:
Tester t = new Tester();
//这里编译器会检查SomeType是否有无参数的构造函数。否则,将会出现编译错误。
而Tester类的构造函数中的新代码实际上等价于下面的代码:
public class Tester
其中T:new()
{
public Tester()
{
T = System。activator . create instance();
}
私人T t
}
也就是说,反射机制仍然用于获取泛型对象的实例。
位律师回复
0条评论