Unterschied zwischen IEnumerable und IEnumerator

Bevor wir uns mit dem Unterschied zwischen IEnumerable und IEnumerator befassen, sollten wir zunächst die Begriffe Enumerator und Enumerable und wann und warum sie verwendet werden.

Enumerable ist ein Modul, das in der Array-Klasse verwendet wird, die Ihnen den Enumerator gibt. Die Klasse selbst hat nicht jede Methode. Tatsächlich wird eine Methode namens "GetEnumerator" verwendet, mit der Sie einem Enumerator das Element abrufen können.

Ein Enumerator ist ein Objekt, das jedes Element in einer Auflistung in einer bestimmten Reihenfolge genau so zurückgibt, wie sie angefordert werden. Der Compiler generiert Code, der einen Enumerator verwendet, wenn Sie eine Foreach-Schleife in C # schreiben..

IEnumerator ist eine Schnittstelle, die von einem Enumerator implementiert wird, und die Enumerable-Klasse implementiert die IEnumerable-Schnittstelle.

Was ist unzählig??

IEnumerable ist eine grundlegende Schnittstelle, mit der ein Objekt abgerufen wird, das weiß, wie die Elemente in der Auflistung aufgezählt (oder iteriert) werden.

Dies ist eine Implementierung des Iteratormusters, die einen Mechanismus zum Durchlaufen eines Objekts in der Auflistung unabhängig von seiner internen Struktur bereitstellt. Die IEnumerable-Schnittstelle stellt ein Objekt dar, das in einer Auflistung durchlaufen werden kann.

Es verwendet nur eine Methode "GetEnumerator", die eine Instanz der Enumerator-Klasse zurückgibt, die die IEnumerator-Schnittstelle implementiert.

Was ist Ienumerator??

Die IEnumerator-Schnittstelle deklariert andererseits zwei Methoden - Reset () und MoveNext () - und eine Eigenschaft, Current. MoveNext () gibt ein boolesches Vale zurück, das das Ende der Liste angibt, und hilft beim Positionieren des ersten Elements in der Liste, nachdem die Reset () - Methode aufgerufen wurde. Der Enumerator wird auf seine Standardposition gesetzt, sodass die Liste von der Liste erneut durchlaufen wird Anfang.

Die Current-Eigenschaft kann nur über eine Instanz der IEnumerator-Schnittstelle aufgerufen werden und gibt das aktuelle Element in der Liste zurück.

Unterschied zwischen IEnumerable und IEnumerator

Grundlagen von IEnumerable und Ienumerator

Sowohl IEnumerable als auch IEnumerator sind Schnittstellen, die das Iterator-Software-Entwurfsmuster gemeinsam in .NET Framework implementieren. Das .Net Framework ermöglicht den Zugriff auf einzelne Elemente in der benutzerdefinierten Auflistung, während die Schnittstellen IEnumerable und IEnumerator implementiert werden. Die IEnumerable-Schnittstelle deklariert nur eine Methode namens GetEnumerator, die einen anderen Schnittstellentyp, die IEnumerator-Schnittstelle, für diese bestimmte Auflistung zurückgibt. IEnumerator hingegen ist die Basisschnittstelle für alle nicht generischen Enumeratoren, die zum Lesen der Daten in der Sammlung verwendet werden. Enumeratoren können jedoch nicht zum Ändern der zugrunde liegenden Auflistung verwendet werden.

Methoden

Die IEnumerable-Schnittstelle definiert nur eine Methode GetEnumerator (), bei der es sich um eine Instanzmethode handelt, die für mehrere verschiedene Auflistungstypen verwendet wird. Es erhält einen IEnumerator-Iterator, mit dem alle Werte der Auflistung durchlaufen werden können. Wenn Sie eine foreach-Schleife in C # schreiben, ruft der generierte Code die GetEnumerator-Methode auf, um den von der Schleife verwendeten Enumerator zu erstellen.

IEnumerator verwendet dagegen zwei Methoden MoveNext () und Reset () und eine Eigenschaft Current. Die MoveNext () -Methode führt den Enumerator zum nächsten Element der Auflistung, während die Reset () -Methode den Enumerator auf seine Standardposition setzt, die sich vor dem ersten Element in der Auflistung befindet.

Implementierung

IEnumerable ist eine generische Schnittstelle, die eine Abstraktion für das Durchlaufen von Elementen bietet. Durch die Implementierung der IEnumerable-Schnittstelle ermöglicht eine generische Klasse die Iteration im Wesentlichen über die IEnumerator-Schnittstelle. Dabei stellen diese Klassen eine gemeinsame Schnittstelle bereit, um eine Instanz eines IEnumerator-Objekts abzurufen, das alle grundlegenden Navigationsmethoden unterstützt.

IEnumerator ist die Basisschnittstelle für Enumeratoren. Für die Verwendung der IEnumerable-Schnittstelle muss die Klasse den IEnumerator implementieren. Beide Schnittstellen müssen implementiert werden, wenn Sie foreach unterstützen möchten. Die abstrakte Klasse 'AbstractEnumerator' implementiert die IEnumerator-Schnittstelle.

Funktionalität von IEnumerable und IEnumerator

Die IEnumerable-Schnittstelle ermöglicht zusammen mit der unterstützenden IEnumerator-Schnittstelle das Durchlaufen der Elemente im Stapel mithilfe der 'foreach'-Anweisung. Es ist die Basisschnittstelle, die für Sammlungsobjekte verwendet wird. Die Iteration beginnt mit dem obersten Element im Stapel und endet mit dem ältesten Element im Stapel. Einfach ausgedrückt, handelt es sich um ein Objekt, das aufgezählt werden kann.

Zusammen mit der IEnumerator-Schnittstelle ermöglichen sie die standardisierte, sequentielle Wiederholung der ArrayList-Elemente, beginnend mit dem ersten Element und vorwärts. Die foreach-Anweisung verwendet die Methoden und Eigenschaften der IEnumerator-Schnittstelle, um alle Elemente in einer Auflistung zu durchlaufen.

IEnumerable vs. IEnumerator: Vergleichstabelle

Zusammenfassung von IEnumerable verses IEnumerator

Kurz gesagt, sowohl IEnumerable als auch IEnumerator sind Schnittstellen, mit denen eine Klasse mit Auflistungsnatur aufgezählt oder iteriert wird. Dies bedeutet, dass sie den iterativen Zugriff in einer benutzerdefinierten Auflistung erleichtern. IEnumerable ist die generische Schnittstelle, die für Objekttypobjekte verfügbar ist. Durch die Implementierung der IEnumerable-Schnittstelle ermöglicht eine generische Klasse die Iteration im Wesentlichen über die IEnumerator-Schnittstelle. Es verwendet nur eine Methode GetEnumerator, die eine Instanz der Enumerator-Klasse zurückgibt, die die IEnumerator-Schnittstelle implementiert. Die IEnumerator-Schnittstelle ist als Zugriffsmechanismus gedacht und kann nicht zum Ändern der zugrunde liegenden Auflistung verwendet werden. Es bietet zwei abstrakte Methoden Reset () und MoveNext () sowie eine Eigenschaft Current zum Aufrufen eines bestimmten Elements in einer Auflistung.