пытаюсь сделать кастом коллекцию:
public class PresentationValueEntry : System.Collections.Generic.ICollection [ ValueSource ]
{
.......
// С этим все нормально
public GetEnumerator ( ) : IEnumerator [ ValueSource ]
{
sources.GetEnumerator ( );
}
// вот на это ругается
GetEnumerator ( ) : System.Collections.IEnumerator implements System.Collections.IEnumerable.GetEnumerator
{
( sources : System.Collections.IEnumerable ).GetEnumerator ( );
}
}
Текст ошибки:
attempted return type overload on method Workspace.Presentation.PresentationValueEntry.GetEnumerator() : System.Collections.IEnumerator and method Workspace.Presentation.PresentationValueEntry.GetEnumerator() : System.Collections.Generic.IEnumerator[Workspace.Presentation.ValueSource]
Что я делаю не так?
Здравствуйте, Visor2004, Вы писали:
V>V> // С этим все нормально
V> public GetEnumerator ( ) : IEnumerator [ ValueSource ]
V> ...
V> // вот на это ругается
V> GetEnumerator ( ) : System.Collections.IEnumerator implements System.Collections.IEnumerable.GetEnumerator
V>
V>Текст ошибки:
V>V>attempted return type overload on method Workspace.Presentation.PresentationValueEntry.GetEnumerator() : System.Collections.IEnumerator and method Workspace.Presentation.PresentationValueEntry.GetEnumerator() : System.Collections.Generic.IEnumerator[Workspace.Presentation.ValueSource]
V>Что я делаю не так?
Из сообщения очевидно, что недопустимо иметь в одном типе два метода сигнатуры которых отличаются только лишь возвращаемым значением.
Собственно проблема решается простым переименованием метода явно реализующего интерфейс. Таким образом вместо:
GetEnumerator ( ) : System.Collections.IEnumerator implements System.Collections.IEnumerable.GetEnumerator
можно написать например:
GetEnumeratorNonGeneric() : System.Collections.IEnumerator implements System.Collections.IEnumerable.GetEnumerator
и все будет ОК.
Но на самом деле можно делать проще. Немерл поддерживает ковариантность при реализации интерфейсов. Так что можно просто удалить второй GetEnumerator() и компилятор использует первый (публичный) для реализации методов обоих интерфейсов (дженерик-интерфейса и обычного).
Так что в твоем случае можно просто грохнуть GetEnumerator().
ЗЫ
К сожалению, IDE не учитывает всех нюансов реализации интерфейсов и предлагает реализовать оба метода.
Здравствуйте, VladD2, Вы писали:
Удален оверквотинг.
спасибо