我有一个名为Factory
的抽象类工厂有一个方法createModel()
public abstract class Factory<T, U>{
public T CreateModel(IDictionary<String, Object> parametersDictionary)
{
T toReturn;
if (ValidateDictionary(parametersDictionary) != true)
return null;
else
{
toReturn = new T(U);
}
return toReturn;
}}
在else语句中,我想创建一个Car实例来获取CarPart对象,我将从另一个方法调用中获取该对象。此逻辑将应用于其他Factory子类型,因此我想继承此方法。问题是我无法使用另一个Generic参数创建Car泛型实例。
我环顾四周,发现我可以使用Activator类。
(T)Activator.CreateInstance(typeof运算( Car),args);
但是,只有当您想要为构造函数提供某种类型时,这似乎才有效。
我也尝试过:
public abstract class Factory其中T:new()
但这并没有让我解析构造函数的任何参数。
如何实现这个抽象类?
Edit1:更改了说明的命名
Edit2:为了澄清,U是一个包含创建T所需的大约20个参数的结构。所以为了创建一个新的T,我需要传递一个U对象来封装所有必需的20个参数。
答案 0 :(得分:0)
在Abion47指出Activator.CreateInstance应该没有任何问题做我需要它做的事情后,我看了一下这个问题,并让它工作。
对于任何可能遇到此问题的人:
public abstract class Sentinel<T,U> where T: new() where U: new()
{
public T CreateModel(IDictionary<String, Object> parametersDictionary)
{
T toReturn ;
if (ValidateDictionary(parametersDictionary) != true)
return default(T);
else
{
U parameters = ParseDictionaryToParameters(parametersDictionary);
toReturn = (T)Activator.CreateInstance(typeof(T), new object[] {parameters});
}
//If we got this far then everything should be fine.
return toReturn;
}
public abstract U ParseDictionaryToParameters(IDictionary<String, Object> parametersDictionary);
public abstract Boolean ValidateDictionary(IDictionary<String, Object> parametersDictionary);
}