繁体   English   中英

构造函数中的泛型类型

[英]Generic Type in constructor

我有一个通用类型接口,并且想要一个 object 的构造函数来接收通用接口。
喜欢:

public Constructor(int blah, IGenericType<T> instance)
{}

我想要创建此 object 的代码来指定 IGenericType(使用控制反转)。 我还没有看到发生这种情况的方法。 有什么建议可以做到这一点吗?

我希望有人像这样创建 object:

Constructor varname = new Constructor(1, new GenericType<int>());

您不能使构造函数通用,但可以使用通用 static 方法代替:

public static Constructor CreateInstance<T>(int blah, IGenericType<T> instance)

如果需要,然后在构造函数之后做任何你需要做的事情。 在某些情况下,另一种选择可能是引入通用接口扩展的非通用接口。

编辑:根据评论...

如果要将参数保存到新创建的 object 中,并且希望以强类型的方式进行,那么类型也必须是泛型的。

到那时,构造函数问题就消失了,但您可能希望在非泛型类型中保留一个 static 泛型方法:因此您可以利用类型推断:

public static class Foo
{
    public static Foo<T> CreateInstance<T>(IGenericType<T> instance)
    {
        return new Foo<T>(instance);
    }
}

public class Foo<T>
{
    public Foo(IGenericType<T> instance)
    {
        // Whatever
    }
}

...

IGenericType<string> x = new GenericType<string>();
Foo<string> noInference = new Foo<string>(x);
Foo<string> withInference = Foo.CreateInstance(x);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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