2012-03-13 83 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

您不能有兩個接口具有相同的名稱和相同數量的參數。請注意,您不能簡單地將它們與約束進行區分。

顯然,您可以將舊界面更改爲新規格。