繁体   English   中英

创建一个泛型类型的实例,它接受一个次要泛型类型的参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM