【发布时间】:2009-08-11 22:16:15
【问题描述】:
我不确定我想要做什么甚至是一个好主意,但问题仍然存在:我有MyClass,我想实现两种不同类型的通用IEnumerable 类,例如
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()因为接口的原因不带参数,唯一不同的是返回类型,这是不允许的。
以下是我的选择:
- 我正在考虑使用
MyClass将实现的“主要”IEnumerable泛型类型,然后仅添加因参数而异的额外方法,而不仅仅是返回类型(例如Add),而不实现额外的泛型接口。 - 我可以为
MyClass创建一个通用基类,将其命名为MyBaseClass<T>,它将实现IEnumerable<KeyValuePair<T, string>>。然后,我会有不同版本的MyClass,例如MyClass<string>和MyClass<MyEnum>。
这里似乎更可取,还是我错过了一些更好的解决方案?
【问题讨论】:
-
你不能继承接口(或更多)。
-
简而言之 - 接口被实现而不是继承。
-
谢谢——我修正了我的术语。