我不確定我想要做什麼甚至是一個好主意,但無論如何,這是問題:我有MyClass
,我想實現兩種不同類型的通用IEnumerable
類,例如C#實現兩個不同的通用接口
public class MyClass : IEnumerable<KeyValuePair<string, string>>,
IEnumerable<KeyValuePair<MyEnum, string>>
現在,這樣做的問題是,當我嘗試定義從接口必要的方法,編譯器會抱怨「類型‘MyClass的’已經定義了一個名爲‘的GetEnumerator’具有相同參數類型的成員」。這是因爲我有這兩種方法:
public IEnumerator<KeyValuePair<MyEnum, string>> GetEnumerator() { ... }
public IEnumerator<KeyValuePair<string, string>> GetEnumerator() { ... }
我必須GetEnumerator()
不帶參數,因爲接口的,而不同的僅僅是返回類型,這是不允許的。
這裏是我所看到的是我的選擇:
- 我正在考慮有一個「主」
IEnumerable
通用其中MyClass
將執行,然後就補充說,通過參數的不同,而不僅僅是返回類型額外的方法類型(例如Add
),而不實現額外的通用接口。 - 我可以爲
MyClass
創建一個通用基類,將其稱爲MyBaseClass<T>
,它將實現IEnumerable<KeyValuePair<T, string>>
。然後,我會有MyClass
的不同版本,例如MyClass<string>
和MyClass<MyEnum>
。
在這裏看起來更可取,或者我錯過了一個更好的解決方案?
您不能繼承接口(或更多接口)。 – 2009-08-11 22:21:13
@Arnis:你什麼意思? – scwagner 2009-08-11 22:26:25
http://msdn.microsoft.com/en-us/library/ms973861.aspx – 2009-08-11 22:27:02