首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个泛型接口传递给一个方法

将多个泛型接口传递给一个方法
EN

Stack Overflow用户
提问于 2013-02-19 01:27:06
回答 3查看 4K关注 0票数 3

我试图将多个泛型接口作为参数传递给我的一个类的构造函数。

以下代码无法编译:

代码语言:javascript
复制
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。

这完全可以做到吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-19 01:30:40

听起来你可能想让Pinboard泛型:

代码语言:javascript
复制
public class Pinboard<T1, T2, T3>
{
    public Pinboard(IPosterGenerator<T1> generator1,
                    IPosterGenerator<T2> generator2,
                    IPosterGenerator<T3> generator3)
    {
         ...
    }
}

要使调用更容易,还可以使用泛型方法创建非泛型类:

代码语言:javascript
复制
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);
    }
}

如果你已经有了生成器,你可以直接调用:

代码语言:javascript
复制
// Or whatever...
var board = Pinboard.Create(bigGenerator, smallGenerator, mediumGenerator);
票数 6
EN

Stack Overflow用户

发布于 2013-02-19 01:32:38

你必须用A,B&C来声明你的类是泛型的。如下所示:

代码语言:javascript
复制
public class Pinboard<A,B,C> {
  public Pinboard(IPosterGenerator<A> firstPosterGenerator,
                  IPosterGenerator<B> secondPosterGenerator,
                  IPosterGenerator<C> thirdPosterGenerator) { 
  }
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-19 12:52:30

再次抱歉,我的原始问题不够精确。以下是我发现的适合我的(并且足够灵活,可以满足我的需求):

代码语言:javascript
复制
public interface IPosterGenerator
{
}

public interface IPosterGenerator<T> : IPosterGenerator
{
    IQueryable<T> GetPosters();
}

public class Pinboard
{
    public Pinboard(List<IPosterGenerator> generators) 
    {

    }
}

再次感谢你们的支持,各位!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14941947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档