不,这不是一个关于泛型的问题。
我有一个工厂模式,有几个带有内部构造函数的类(如果不是通过工厂,我不希望它们被实例化)。
我的问题是,除非我在非公共参数上传递"true“,否则CreateInstance会失败,并显示”没有为此对象定义无参数构造函数“错误。
示例
// Fails
Activator.CreateInstance(type);
// Works
Activator.CreateInstance(type, true);我想让工厂泛型更简单一点,就像这样:
public class GenericFactory<T> where T : MyAbstractType
{
public static T GetInstance()
{
return Activator.CreateInstance<T>();
}
}但是,我无法找到如何传递"true“参数以便它接受非公共构造函数(内部)。
我是不是错过了什么,或者这是不可能的?
发布于 2008-09-11 19:48:43
为了解决这个问题,你不能这样改变你的用法吗:
public class GenericFactory<T> where T : MyAbstractType
{
public static T GetInstance()
{
return Activator.CreateInstance(typeof(T), true);
}
}工厂方法仍然是泛型的,但是对激活器的调用不会使用泛型重载。但您仍然应该获得相同的结果。
发布于 2008-09-11 19:53:40
如果你绝对要求构造函数是私有的,你可以尝试这样做:
public abstract class GenericFactory<T> where T : MyAbstractType
{
public static T GetInstance()
{
return (T)Activator.CreateInstance(typeof(T), true);
}
}否则,您最好添加新的约束并执行该路线:
public abstract class GenericFactory<T> where T : MyAbstractType, new()
{
public static T GetInstance()
{
return new T;
}
}您正在尝试使用GenericFactory作为所有工厂的基类,而不是从头开始编写每个工厂,对吗?
发布于 2010-06-13 20:54:59
除了要使用Activator.CreateInstance(typeof(T),true)之外,T还应该有默认构造函数
https://stackoverflow.com/questions/57439
复制相似问题