IEnumerable i IEnumerator

Anonim

Zanim przejdziemy do różnicy między IEnumerable i IEnumerator, najpierw zrozumiemy pojęcia Enumerator i Enumerable i kiedy i dlaczego ich używać.

Enumerable to moduł używany w klasie Array, który daje Enumerator. Klasa sama w sobie nie stosuje żadnej metody. W rzeczywistości używa metody zwanej "GetEnumerator", która daje moduł wyliczający do pobrania elementu.

Enumerator to obiekt, który zwraca każdy element w kolekcji w określonej kolejności, dokładnie tak, jak jest wymagany. Kompilator generuje kod, który używa modułu wyliczającego, podczas pisania pętli foreach w języku C #.

IEnumerator to interfejs implementowany przez moduł wyliczający, a klasa przeliczalna implementuje interfejs IEnumerable.

Co jest niezliczone?

IEnumerable to podstawowy interfejs używany do uzyskiwania obiektu, który wie, jak wyliczyć (lub iterować) elementy w kolekcji.

Jest to implementacja wzorca iteratora, który zapewnia mechanizm przechodzenia przez obiekt w kolekcji, niezależnie od jej wewnętrznej struktury. Interfejs IEnumerable reprezentuje obiekt, który może być iterowany w kolekcji.

Używa tylko jednej metody "GetEnumerator", która zwraca instancję klasy enumeratorów, która implementuje interfejs IEnumerator.

Czym jest Ienumerator?

Interfejs IEnumerator, jedna ręka, deklaruje dwie metody - Reset () i MoveNext () - oraz jedną właściwość, Current. Funkcja MoveNext () zwraca wartość logiczną Boolean, która wskazuje koniec listy i pomaga pozycjonować pierwszy element na liście po wywołaniu metody Reset () - ustawia moduł wyliczający na pozycję domyślną, tak aby powtórzyć listę od początek.

Właściwość Current może być wywołana tylko przez instancję interfejsu IEnumerator i zwraca bieżący element na liście.

Różnica między IEnumerable a IEnumerator

Podstawy IEnumerable i Ienumerator

Zarówno IEnumerable, jak i IEnumerator są interfejsami, które implementują wzorzec projektowania iteratora w ramach.Net Framework..Net Framework umożliwia dostęp do poszczególnych elementów w kolekcji niestandardowej przy jednoczesnym wdrażaniu interfejsów IEnumerable i IEnumerator. Interfejs IEnumerable deklaruje tylko jedną metodę o nazwie GetEnumerator, która zwraca inny typ interfejsu o nazwie interfejs IEnumerator dla tej konkretnej kolekcji. Z drugiej strony IEnumerator jest podstawowym interfejsem dla wszystkich nieliczbowych enumeratorów, które służą do odczytu danych z kolekcji. Jednak moduły wyliczające nie mogą być używane do modyfikowania podstawowej kolekcji.

Metody

Interfejs IEnumerable definiuje tylko jedną metodę GetEnumerator (), która jest metodą instancji używaną w kilku różnych typach kolekcji. Otrzymuje iterator IEnumerator, który może być użyty do iteracji wszystkich wartości z kolekcji. Podczas pisania pętli foreach w języku C # generowany kod wywołuje metodę GetEnumerator w celu utworzenia modułu wyliczającego używanego przez pętlę.

Z drugiej strony IEnumerator używa dwóch metod: MoveNext () i Reset () oraz właściwości Current. Metoda MoveNext () przenosi moduł wyliczający do następnego elementu kolekcji, podczas gdy metoda Reset () ustawia moduł wyliczający na domyślną pozycję, która znajduje się przed pierwszym elementem kolekcji.

Realizacja

IEnumerable to ogólny interfejs, który zapewnia abstrakcję do zapętleń elementów i implementując interfejs IEnumerable, klasa ogólna zasadniczo umożliwia iterację za pośrednictwem interfejsu IEnumerator. W ten sposób te klasy kończą dostarczanie wspólnego interfejsu do pobierania instancji IEnumeratora obiekt obsługujący wszystkie podstawowe zestawy metod nawigacyjnych.

IEnumerator jest podstawowym interfejsem dla enumeratorów, a użycie interfejsu IEnumerable wymaga, aby klasa musiała implementować IEnumerator. Oba interfejsy muszą być wdrożone, jeśli chcesz zapewnić wsparcie dla foreach. Klasa abstrakcyjna "AbstractEnumerator" implementuje interfejs IEnumerator.

Funkcjonalność IEnumerable i IEnumerator

Interfejs IEnumerable, wraz z obsługą interfejsu IEnumerator, pozwala na iteracje nad elementami w stosie za pomocą instrukcji foreach. Jest to podstawowy interfejs używany do obiektów typu kolekcji. Iteracja rozpoczyna się od górnego elementu stosu i kończy się najstarszym elementem stosu. Mówiąc najprościej, reprezentuje obiekt, który można wyliczyć.

Wraz z interfejsem IEnumerator umożliwiają one iterację elementów ArrayList w standaryzowany, sekwencyjny sposób, zaczynając od pierwszego elementu i idąc dalej. Instrukcja foreach używa metod i właściwości interfejsu IEnumerator do iterowania wszystkich elementów w kolekcji.

IEnumerable vs. IEnumerator: Tabela porównawcza

Podsumowanie IEnumerable wiersze IEnumerator

W skrócie, zarówno IEnumerable jak i IEnumerator są interfejsami używanymi do wyliczenia lub iteracji klasy o charakterze kolekcji, co oznacza, że ​​ułatwiają iteracyjny dostęp w niestandardowej kolekcji. IEnumerable jest ogólnym interfejsem dostępnym dla obiektów typu collection i implementując interfejs IEnumerable, klasa ogólna w zasadzie umożliwia iterację poprzez interfejs IEnumerator. Używa tylko jednej metody GetEnumerator, która zwraca instancję klasy enumeratorów implementującą interfejs IEnumerator.Interfejs IEnumerator ma być używany jako akcesory i nie można go używać do modyfikowania podstawowej kolekcji. Udostępnia dwie abstrakcyjne metody Reset () i MoveNext () oraz właściwość Current, aby wywołać określony element w kolekcji.