Я не уверен, что то, что я хочу сделать, является даже хорошей идеей, но в любом случае вот проблема: у меня есть 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()
без параметров из-за интерфейса, и единственное, что отличается, - это тип возвращаемого значения, что недопустимо.
Вот что я вижу в качестве своих вариантов:
- Я подумывал о том, чтобы иметь «основной» универсальный тип
IEnumerable
, который MyClass
мог бы реализовать, а затем просто добавление дополнительных методов, отличающихся параметрами, а не просто возвращаемого типа (например, Add
), без реализации дополнительного универсального интерфейсы.
- Я мог бы создать базовый базовый класс для
MyClass
, назвать его MyBaseClass<T>
, и он бы реализовал IEnumerable<KeyValuePair<T, string>>
. Тогда у меня были бы разные версии MyClass
, например MyClass<string>
и MyClass<MyEnum>
.
Что здесь предпочтительнее, или я что-то упустил, что было бы еще лучшим решением?