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