【发布时间】:2013-06-26 06:43:47
【问题描述】:
如果要创建泛型的新实例,则需要定义 new constraint,如下所示:
public T SomeMethod<T>() where T : new()
{
return new T();
}
是否可以使用反射创建一个没有新约束的 T 实例,像这样(包含伪代码):
public T SomeMethod<T>()
{
if (T has a default constructor)
{
return a new instance of T;
}
else
{
return Factory<T>.CreateNew();
}
}
【问题讨论】:
-
你的
a new instance of T= `new T()' -
注意——你不能通过
if检查来满足约束——即使你检查它有一个构造函数,你也不能调用一个要求T : new()约束的方法,因为编译器不会相信你
标签: c# .net generics reflection instantiation