不,这不是关于泛型的问题.
我有一个带有内部构造函数的几个类的工厂模式(如果没有通过工厂,我不希望它们被实例化).
我的问题是CreateInstance
失败了"没有为此对象定义的无参数构造函数"错误,除非我在非公共参数上传递"true".
例
// Fails Activator.CreateInstance(type); // Works Activator.CreateInstance(type, true);
我想让工厂变得通用,使其更简单,如下所示:
public class GenericFactorywhere T : MyAbstractType { public static T GetInstance() { return Activator.CreateInstance (); } }
但是,我无法找到如何传递"true"参数,以接受非公共构造函数(内部).
我错过了什么或者不可能吗?
为了解决这个问题,你不能只改变你的使用方式:
public class GenericFactorywhere T : MyAbstractType { public static T GetInstance() { return Activator.CreateInstance(typeof(T), true); } }
您的工厂方法仍然是通用的,但对激活器的调用不会使用泛型过载.但是你仍然应该达到同样的效果.