Преди да скочим в разликата между IEnumerable и IEnumerator, нека първо разберем термините Enumerator и Enumerable и кога и защо да ги използваме.

Изброим е модул, използван в клас Array, който ви дава Enumerator. Самият клас не е всеки метод. Всъщност той използва метод, наречен „GetEnumerator“, който ви дава избродител за извличане на продукта.

Изброителят е обект, който връща всеки елемент от колекция в определен ред, точно както са поискани. Компилаторът генерира код, който използва Enumerator, когато пишете цикъл на foreach в C #.

IEnumerator е интерфейс, реализиран от изброителя и изброяващият клас реализира IEnumerable интерфейс.

Какво е безброй?

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

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

Той използва само един метод "GetEnumerator", който връща екземпляр от клас на преброяване, който реализира IEnumerator интерфейс.

Какво е Ienumerator?

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

Текущото свойство може да бъде извикано само чрез инстанция на интерфейса 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 vs. IEnumerator: Сравнителна диаграма

Обобщение на IE безброй стихове IEnumerator

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

Препратки

  • Кредит за изображение: https://bg.wikipedia.org/wiki/Read-copy-update#/media/File:Rcu_api.jpg
  • Кредит за изображение: https://upload.wikimedia.org/wikipedia/commons/1/17/C_Sharp_Code.PNG
  • Гранд, Марк и Брад Мерил. Визуални основни модели на дизайн. Ню Джърси: John Wiley & Sons, 2005. Печат
  • Голдинг, Тод. Професионални .Net 2.0 Generics. Ню Джърси: John Wiley & Sons, 2005. Печат
  • Милър, Рик. C # Колекции: Подробна презентация. Вирджиния: Pulp Free Press, 2012. Печат