2012-03-13 84 views
1

实现接口,我有以下接口通过泛型

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); 
} 

是否有可能有这样的吗?

感谢

+0

我不明白为什么不。 – BoltClock 2012-03-13 08:09:09

+0

BoltClock♦我有重复的公共接口IReport 一切都坐在相同的命名空间 – 2012-03-13 08:11:34

+0

嗯,我以为你正在替换另一个。 – BoltClock 2012-03-13 08:12:15

回答

2

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

但考虑到你的方法的输出参数我会简单地使用更有意义的名称:

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

因为它,我不需要它们,因为我只有一个函数的接口 – 2012-03-13 08:20:19

+0

@NightWalker,在这种情况下,我担心你试图实现的是不可能的。你不能有2个接口具有相同的名称和相同的泛型参数。你将不得不重新考虑你的设计。 – 2012-03-13 08:21:04

+0

是否可以将两个接口合并为一个,并且在泛型中指定我想要的内容? – 2012-03-13 08:23:39

0

是的,这是可能的,你甚至可以用相同的类中实现它们。 :)

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

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

0

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

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