При написании кода на языке C# достаточно часто приходится использовать конструкцию foreach. Ведь так на много удобнее проходить по коллекциям, по сравнению с использованием цикла for. Безусловно, у каждого метода есть свои плюсы и минусы и выбор всегда зависит от конкретной задачи и ситуации. Но на днях меня удивила одни интересная особенность конструкции foreach, а именно то, как это работает. Рассмотрим простой пример:
У нас есть некая коллекция элементов и с помощью foreach мы выводим на консоль имена всех элементов. При этом класс MyCollection выглядит так:
Класс коллекции реализовывает единственный метод GetEnumerator интерфейса IEnumerable для возможности использования класса в конструкции foreach.Особенности enumerator’а нас сейчас не интересуют, будем считать что он работает так, как ему положено.
Теперь сделаем простую вещь, а именно, поменяем наш класс MyCollection так, чтобы он больше не реализовывал интерфейс IEnumerable, при этом метод GetEnumerator оставим без изменений.
К моему удивлению, код и дальше продолжил компиляцию и правильно работал. Первым делом, посмотрим какой IL-код у нас получился: Read more: e0ne's comments
У нас есть некая коллекция элементов и с помощью foreach мы выводим на консоль имена всех элементов. При этом класс MyCollection выглядит так:
Класс коллекции реализовывает единственный метод GetEnumerator интерфейса IEnumerable для возможности использования класса в конструкции foreach.Особенности enumerator’а нас сейчас не интересуют, будем считать что он работает так, как ему положено.
Теперь сделаем простую вещь, а именно, поменяем наш класс MyCollection так, чтобы он больше не реализовывал интерфейс IEnumerable, при этом метод GetEnumerator оставим без изменений.
К моему удивлению, код и дальше продолжил компиляцию и правильно работал. Первым делом, посмотрим какой IL-код у нас получился: Read more: e0ne's comments
0 comments:
Post a Comment