Оператор
foreach
повторяет группу встроенных операторов для каждого элемента массива или коллекции объектов, которая реализует интерфейсSystem.Collections.IEnumerable
илиSystem.Collections.Generic.IEnumerable<T>
.Какова связь между foreach и IEnumerable?
Я понимаю, что если мы хотим использовать foreach в коллекции объектов, нам нужно реализовать IEnumerable.
Я хочу понять, как реализация в IEnumerable позволяет использовать «foreach»?
Исходный код IEnumerable, похоже, имеет только одну функцию «GetEnumerator», и, очевидно, нет реализации, поскольку IEnumerable - это интерфейс. Итак, как ключевое слово foreach фактически использует интерфейс IEnumerable для перечисления?
Edit: Кроме того, пытаясь понять в этом контексте:
IEnumerable<Int> myNumbers = new IEnumerable<Int>();
Какой GetEnumerator() называется/используется здесь?
Edit 2:
Таким образом, ответ кажется:
1: утиная типизация - (. Спасибо @Alexei Левенков я принял @horrorcat в качестве ответа, потому что я могу принять только один :))
2. Я сделал очевидную ошибку в попытке создать конкретный экземпляр интерфейса (во второй части моего вопроса) - (спасибо @Gary Vass)
Это просто вызывает метод. – SLaks
Разработчик 'IEnumerable' реализует метод' GetEnumerator() ', foreach вызывает этот метод, а затем использует результирующий' IEnumerator' для итерации по элементам. – Lukazoid
Возможно, вам следует прочитать [Интерфейсы (Руководство по программированию на C#)] (http://msdn.microsoft.com/en-us/library/ms173156.aspx) –