通过泛型实现接口

时间:2012-03-13 08:07:22

标签: c# .net generics

我有以下接口

public interface IReport<TInput, TOutput>
{
    List<TOutput> GenerateReport(TInput input); 
}


public interface IReport<TOutput>
{
    List<TOutput> GenerateReport();
}

但现在我想拥有以下界面

public interface IReport<TInput, TOutput>
{
    TOutput GenerateReport(TInput input); 
}

有可能这样吗?

谢谢

3 个答案:

答案 0 :(得分:2)

不,这是不可能的,因为您已经定义了IReport<TInput, TOutput>接口。并且您无法将TOutput GenerateReport(TInput input);移动到第一个接口,因为它已经提供了具有相同名称和相同输入参数的方法。在执行重载方法解析时不考虑输出参数。

但是考虑到你的方法的输出参数,我只会使用更有意义的名字:

public interface IReport<TInput, TOutput>
{
    List<TOutput> GenerateReports(TInput input);
    TOutput GenerateReport(TInput input);
}

答案 1 :(得分:0)

是的,有可能,你甚至可以用同一个类来实现它们。 :)

但是,您需要重命名第二个IReport,因为您已经拥有了该名称。

如果我是你,我会将方法声明从新界面移动到旧界面。

答案 2 :(得分:0)

您不能拥有两个具有相同名称和相同数量参数的接口。请注意,您不能简单地用约束来区分它们。

显然,您可以将旧界面更改为新规格。