Мне часто приходится реализовывать некоторые интерфейсы, такие как IEnumerable<T>
в моем коде.
Каждый раз при автоматической реализации я сталкиваюсь со следующим:
public IEnumerator<T> GetEnumerator() {
// Code here...
}
public IEnumerator GetEnumerator1() {
// Code here...
}
Хотя мне нужно реализовать оба метода GetEnumerator () , они не могут иметь одинаковое имя, даже если мы понимаем, что они так или иначе делают то же самое. Компилятор не может воспринимать их как перегрузку другого, потому что отличается только тип возвращаемого значения.
При этом мне удается установить для аксессора GetEnumerator1()
значение private
. Таким образом, компилятор не будет жаловаться на то, что он не реализует элемент интерфейса, и я просто добавляю NotImplementedException
в тело метода.
Однако мне интересно, является ли это хорошей практикой или я буду действовать иначе, как, возможно, псевдоним метода или что-то в этом роде.
Каков наилучший подход при реализации интерфейса, такого как IEnumerable<T>
, который требует реализации двух разных методов с одинаковым именем?
РЕДАКТИРОВАТЬ # 1
Влияет ли VB.NET по-другому на C # при реализации интерфейсов, поскольку в VB.NET это реализовано явно, что вызывает GetEnumerator1()
. Вот код:
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator
// Code here...
End Function
Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator Implements System.Collections.Generic.IEnumerable.GetEnumerator
// Code here...
End Function
Оба GetEnumerator()
метода явно реализованы, и компиляция откажет им иметь одинаковые имена. Почему?