c#

位置:IT落伍者 >> c# >> 浏览文章

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


发布日期:2023年01月28日
 
对C#泛型中的new()约束的一点思考

对于new()约束大家可能有一个误解以为使用了new约束之后在创建对象时与非泛型的版本是一致的

public class Tester<T>

where T:new()

{

public Tester()

{

t = new T();//等同于非泛型版本的new? 例如 object o = new object();?

}

private T t;

}

事实上使用new关键字的作用只是让编译器在泛型实例化之处检查所绑定的泛型参数是否具有无参构造函数

Tester<SomeType> t = new Tester<SomeType>();

//此处编译器会检查SomeType是否具有无参构造函数若没有则会有compile error

而Tester<T>类的构造函数中的new代码实际上等同于下面的代码

public class Tester<T>

where T:new()

{

public Tester()

{

t = SystemActivatorCreateInstance<T>();

}

private T t;

}

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

上一篇:基于消息与.Net Remoting的分布式处理架构

下一篇:在.net开发中几个重要的认识误区(1)