我试图将多个泛型接口作为参数传递给我的一个类的构造函数。
以下代码无法编译:
public interface IPosterGenerator<T>
{
IQueryable<T> GetPosters();
}
public class Pinboard
{
public Pinboard(IPosterGenerator<A> firstPosterGenerator, IPosterGenerator<B> secondPosterGenerator, IPosterGenerator<B> thirdPosterGenerator)
{
}
}我有大约一百种不同类型的海报生成器。它们都继承自IPosterGenerator接口。当我实例化一个新的插接板时,我需要将三个IPosterGenerators传递给插接板的构造函数。但是,这三个IPosterGenerators都属于不同的类型。这就是为什么我想出了这个愚蠢的A,B和C。
这完全可以做到吗?
发布于 2013-02-19 01:30:40
听起来你可能想让Pinboard泛型:
public class Pinboard<T1, T2, T3>
{
public Pinboard(IPosterGenerator<T1> generator1,
IPosterGenerator<T2> generator2,
IPosterGenerator<T3> generator3)
{
...
}
}要使调用更容易,还可以使用泛型方法创建非泛型类:
public static class Pinboard
{
public static Pinboard<T1, T2, T3> Create(IPosterGenerator<T1> generator1,
IPosterGenerator<T2> generator2,
IPosterGenerator<T3> generator3)
{
return new Pinboard<T1, T2, T3>(generator1, generator2, generator3);
}
}如果你已经有了生成器,你可以直接调用:
// Or whatever...
var board = Pinboard.Create(bigGenerator, smallGenerator, mediumGenerator);发布于 2013-02-19 01:32:38
你必须用A,B&C来声明你的类是泛型的。如下所示:
public class Pinboard<A,B,C> {
public Pinboard(IPosterGenerator<A> firstPosterGenerator,
IPosterGenerator<B> secondPosterGenerator,
IPosterGenerator<C> thirdPosterGenerator) {
}
}发布于 2013-02-19 12:52:30
再次抱歉,我的原始问题不够精确。以下是我发现的适合我的(并且足够灵活,可以满足我的需求):
public interface IPosterGenerator
{
}
public interface IPosterGenerator<T> : IPosterGenerator
{
IQueryable<T> GetPosters();
}
public class Pinboard
{
public Pinboard(List<IPosterGenerator> generators)
{
}
}再次感谢你们的支持,各位!
https://stackoverflow.com/questions/14941947
复制相似问题