[英]Create instance of a generic type that takes a parameter a secondary generic type
我有一个名为 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);
然而,这似乎只有当您有某种类型要提供给构造函数时才有效。
我也尝试这样做:
公共抽象类工厂,其中 T: new()
但这并没有让我解析构造函数的任何参数。
如何实现这个抽象类?
编辑 1:更改命名以进行澄清
Edit2:为了澄清起见,U 是一个包含创建 T 所需的大约 20 个参数的结构。因此,为了创建一个新的 T,我需要向它传递一个 U 对象,该对象封装了所有 20 个必需的参数。
在 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.