私は何をしたいのかよく分かりませんが、とにかく問題があります。私はMyClass
という汎用のIEnumerable
クラスの2つの異なるタイプを実装したいのですが、例えば今C#は2つの異なるジェネリックインターフェイスを実装しています
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()
を持っている必要があり、そして異なっ唯一のことが許可されていない戻り値の型、である:私はこれらの2つの方法を持っているためです。ここで
は、私は私のオプションとして見るものです:
- 私は
MyClass
を実装し、「メイン」IEnumerable
ジェネリック型を有する考慮して、ただのパラメータだけではなく、戻り値の型によって異なり、余分なメソッドを追加しました(例えば、Add
)、余分なジェネリックインタフェースを実装する必要はありません。 MyClass
の汎用ベースクラスを作成し、それをMyBaseClass<T>
と呼び、IEnumerable<KeyValuePair<T, string>>
を実装します。次に、私はMyClass
の異なるバージョンを持っています。MyClass<string>
およびMyClass<MyEnum>
。
ここでは好ましいと思われるものがありますか、それとももっと良い解決策になるものがないのでしょうか?
インターフェイス(またはそれ以上)を継承することはできません。 –
@Arnis:どういう意味ですか? – scwagner
http://msdn.microsoft.com/en-us/library/ms973861.aspx –