new()在下面的代码中做了什么?
public class A<T> where T : B, new()发布于 2009-07-06 04:36:09
这是对类的泛型参数的约束,这意味着作为泛型类型传递的任何类型都必须具有无参数构造函数。
所以,
public class C : B
{
public C() {}
}将是一个有效的类型。您可以创建一个新的A<C>实例。
然而,
public class D : B
{
public D(int something) {}
}将不满足该约束,并且不允许您创建A<D>的新实例。如果您还向D添加了一个无参数构造函数,那么它将再次有效。
发布于 2009-07-06 11:03:00
new()约束意味着T必须有一个公共的无参数构造函数。对T()的任何调用都会转换为对Activator.CreateInstance()的各种重载的调用。一种更灵活的方法(例如,如果构造函数需要参数,或者是内部的而不是公共的)是使用委托:
public class A<T> where T : B
{
public void Method(Func<T> ctor)
{
T obj = ctor();
// ....
}
}
// elsewhere...
public class C : B
{
public C(object obj) {}
}
public void DoStuff()
{
A<C> a = new A<C>();
object ctorParam = new object();
a.Method(() => new C(ctorParam));
}https://stackoverflow.com/questions/1085434
复制相似问题