对C#泛型中的new()约束的一点思考

对C#泛型中的new()约束的一点思考,第1张

对C#泛型中的new()约束的一点思考,第2张

对于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

}

也就是说,反射机制仍然用于获取泛型对象的实例。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 对C#泛型中的new()约束的一点思考

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情