Ответ Балы правильный, но было бы полезно узнать , почему вы захотите это сделать.Рассмотрим проблему, с которой столкнулись дизайнеры BCL при разработке библиотек для CLR версии 2. Был существующий интерфейс:
interface IEnumerable
{
IEnumerator GetEnumerator();
}
Теперь вы хотите добавить:
interface IEnumerable<T> : IEnumerable
{
new IEnumerator<T> GetEnumerator();
}
Новый интерфейс отличается от старого только типом возвращаемого значения.
Каков ваш выбор?
1) Пометьте новый GetEnumerator как «новый», чтобы компилятор знал, что это должно бытьновый метод, который не конфликтует со старым методом с тем же именем, но с другим типом возвращаемого значения.
2) Измените имя на GetEnumerator2.
3) Не наследуйте от исходного IEnumerable.
Варианты 2 и 3 ужасны.Вариант 1 великолепен: новые перечислимые элементы работают без проблем с кодом, который ожидает старые перечислимые значения, но код, написанный для использования новых перечислимых элементов, по умолчанию получает «новое» общее поведение.