IEnumerable и IEnumerator

Anonim

Прежде чем перейти к разнице между IEnumerable и IEnumerator, давайте сначала рассмотрим термины Enumerator и Enumerable и когда и зачем их использовать.

Enumerable - это модуль, используемый в классе Array, который дает вам Enumerator. Сам класс не каждый метод. Фактически, он использует метод «GetEnumerator», который дает вам Enumerator для извлечения его элемента.

Перечислитель - это объект, который возвращает каждый элемент в коллекции в определенном порядке, точно так же, как они запрошены. Компилятор генерирует код, который использует Enumerator, когда вы пишете цикл foreach на C #.

IEnumerator - это интерфейс, реализованный перечислителем, а перечислимый класс реализует интерфейс IEnumerable.

Что такое Ienumerable?

IEnumerable - это базовый интерфейс, используемый для получения объекта, который знает, как перечислить (или повторить) элементы в коллекции.

Это реализация шаблона итератора, который обеспечивает механизм для перемещения объекта в коллекции независимо от его внутренней структуры. Интерфейс IEnumerable представляет собой объект, который может быть повторен в коллекции.

Он использует только один метод «GetEnumerator», который возвращает экземпляр класса перечислителя, реализующий интерфейс IEnumerator.

Что такое Ienumerator?

Интерфейс IEnumerator, с другой стороны, объявляет два метода - Reset () и MoveNext () - и одно свойство Current. MoveNext () возвращает булевскую шкалу, которая указывает конец списка, и помогает позиционировать первый элемент в списке после вызова метода Reset () - он устанавливает перечислитель в свою позицию по умолчанию, чтобы повторно повторить список из начало.

Свойство Current может быть вызвано только через экземпляр интерфейса IEnumerator и возвращает текущий элемент в списке.

Разница между IEnumerable и IEnumerator

Основы IEnumerable и Ienumerator

Оба IEnumerable и IEnumerator - это интерфейсы, которые реализуют шаблон разработки программного обеспечения итератора в.Net Framework вместе..Net Framework обеспечивает доступ к отдельным элементам в пользовательской коллекции при реализации интерфейсов IEnumerable и IEnumerator. Интерфейс IEnumerable объявляет только один метод GetEnumerator, который возвращает другой тип интерфейса, называемый интерфейсом IEnumerator для этой конкретной коллекции. IEnumerator, с другой стороны, является базовым интерфейсом для всех не общих счетчиков, которые используются для чтения данных в коллекции. Однако переписчики не могут использоваться для изменения базовой коллекции.

методы

Интерфейс IEnumerable определяет только один метод GetEnumerator (), который является методом экземпляра, используемым для нескольких разных типов коллекций. Он получает итератор IEnumerator, который может использоваться для итерации по всем значениям из коллекции. Когда вы пишете цикл foreach в C #, код, который он генерирует, вызывает метод GetEnumerator для создания Enumerator, используемого циклом.

IEnumerator, с другой стороны, использует два метода MoveNext () и Reset () и свойство Current. Метод MoveNext () переводит счетчик в следующий элемент коллекции, тогда как метод Reset () устанавливает перечислитель в позицию по умолчанию, которое находится перед первым элементом коллекции.

Реализация

IEnumerable - это общий интерфейс, который обеспечивает абстракцию для циклирования элементов и, реализуя интерфейс IEnumerable, общий класс по существу обеспечивает итерацию через интерфейс IEnumerator. При этом эти классы в конечном итоге предоставляют общий интерфейс для извлечения экземпляра IEnumerator объект, который поддерживает весь базовый набор методов навигации.

IEnumerator - это базовый интерфейс для счетчиков, и для использования интерфейса IEnumerable требуется, чтобы класс должен реализовать IEnumerator. Оба интерфейса должны быть реализованы, если вы хотите обеспечить поддержку foreach. Абстрактный класс 'AbstractEnumerator' реализует интерфейс IEnumerator.

Функциональность IEnumerable и IEnumerator

Интерфейс IEnumerable, наряду с поддержкой интерфейса IEnumerator, позволяет вам перебирать элементы в стеке с помощью инструкции foreach. Это основной интерфейс, используемый для объектов типа коллекции. Итерация начинается с верхнего элемента в стеке и заканчивается самым старым элементом в стеке. Проще говоря, он представляет объект, который можно перечислить.

Вместе с интерфейсом IEnumerator они позволяют повторять итерации элементов ArrayList стандартным последовательным образом, начиная с первого элемента и продвигаясь вперед. Оператор foreach использует методы и свойства интерфейса IEnumerator для итерации всех элементов в коллекции.

IEnumerable против IEnumerator: сравнительная таблица

Резюме IEnumerable стихов IEnumerator

В двух словах, как IEnumerable, так и IEnumerator являются интерфейсами, используемыми для перечисления или итерации класса с природой коллекции, что облегчает итеративный доступ в пользовательской коллекции. IEnumerable - это общий интерфейс, доступный для объектов типа коллекции, и, реализуя интерфейс IEnumerable, общий класс по существу обеспечивает итерацию через интерфейс IEnumerator. Он использует только один метод GetEnumerator, который возвращает экземпляр класса перечислителя, реализующий интерфейс IEnumerator.Интерфейс IEnumerator предназначен для использования в качестве аксессуаров, и он не может использоваться для изменения базовой коллекции. Он предоставляет два абстрактных метода Reset () и MoveNext () и свойство Current для вызова определенного элемента в коллекции.