IEnumerable a IEnumerator

Anonim

Než se přeskočíme do rozdílu mezi IEnumerable a IEnumerator, nejprve pochopíme pojmy Enumerator a Enumerable a kdy a proč je použít.

Vyčíslitelný modul je modul používaný ve třídě Array, který vám poskytuje Enumerator. Třída sama neznamená, že každá metoda. Ve skutečnosti používá metodu nazvanou 'GetEnumerator', která vám poskytuje Enumerator, aby získal jeho položku.

Enumerator je objekt, který vrací každou položku v kolekci v určitém pořadí přesně tak, jak je požadováno. Kompilátor generuje kód, který používá Enumerator při psaní foreach smyčky v C #.

IEnumerator je rozhraní implementované výčtečníkem a vyčíslitelná třída implementuje rozhraní IEnumerable.

Co je nenahraditelné?

IEnumerable je základní rozhraní, které se používá k získání objektu, který umí vyčíslit (nebo iterovat) elementy ve sbírce.

Je to implementace modelu iterátoru, který poskytuje mechanismus pro průchod objektu v kolekci bez ohledu na jeho vnitřní strukturu. Rozhraní IEnumerable představuje objekt, který lze opakovat v kolekci.

Používá pouze jednu metodu "GetEnumerator", která vrátí instanci třídy enumerátorů implementující rozhraní IEnumerator.

Co je Ienumerator?

Rozhraní IEnumerator, na druhé straně, deklaruje dvě metody - Reset () a MoveNext () - a jednu vlastnost Current. MoveNext () vrací Boolean vale, který označuje konec seznamu a pomáhá umístit první prvek v seznamu poté, co zavolá metodu Reset () - nastaví výčepník na výchozí pozici tak, aby se zopakoval opakovaný seznam začátek.

Vlastnost Current může být vyvolána pouze prostřednictvím instance rozhraní IEnumerator a vrátí aktuální prvek do seznamu.

Rozdíl mezi IEnumerable a IEnumerator

Základy IEnumerable a Ienumerator

IEnumerable a IEnumerator jsou rozhraní, která společně implementují vzor návrhu softwaru iterator v.Net Framework..Net Framework umožňuje přístup k jednotlivým prvkům v vlastní kolekci při implementaci rozhraní IEnumerable a IEnumerator. Rozhraní IEnumerable deklaruje pouze jednu metodu nazvanou GetEnumerator, která vrátí jiný typ rozhraní nazvaného rozhraní IEnumerator pro danou kolekci. IEnumerator, na druhé straně, je základním rozhraním pro všechny generické enumerátory, které se používají ke čtení dat v kolekci. Vyčíslovače však nelze použít k úpravě základní kolekce.

Metody

Rozhraní IEnumerable definuje pouze jednu metodu GetEnumerator (), která je metodou instance používané na několika různých typech sběru. Získá se iterátor IEnumerator, který lze použít k opakování všech hodnot z kolekce. Když napíšete smyčku foreach v kódu C #, generuje volání metody GetEnumerator k vytvoření Enumerátoru použitého smyčkou.

IEnumerator na druhé straně používá dvě metody MoveNext () a Reset () a vlastnost Current. Metoda MoveNext () převede výčtu na další prvek kolekce, zatímco metoda Reset () nastaví výčtu na výchozí pozici, která je před prvním prvkem v kolekci.

Implementace

IEnumerable je obecné rozhraní, které poskytuje abstrakci pro smyčkování nad prvky a implementací rozhraní IEnumerable, generická třída v podstatě umožňuje iteraci prostřednictvím rozhraní IEnumerator. Tímto způsobem tyto třídy skončí poskytnutím společného rozhraní pro načtení instance IEnumerator objekt, který podporuje celou základní sadu navigačních metod.

IEnumerator je základní rozhraní pro enumerátory a použití IEnumerable rozhraní vyžaduje, aby třída musí implementovat IEnumerator. Obě rozhraní musí být implementovány, pokud chcete poskytnout podporu pro foreach. Abstraktní třída 'AbstractEnumerator' implementuje rozhraní IEnumerator.

Funkce IEnumerable a IEnumerator

Rozhraní IEnumerable spolu s podporujícím rozhraním IEnumerator umožňuje opakovat elementy v zásobníku pomocí příkazu foreach. Jedná se o základní rozhraní použité pro objekty typu sbírky. Iterace začíná horním prvkem v zásobníku a končí nejstarším prvkem v zásobníku. Jednoduše řečeno, představuje objekt, který lze vyčíslit.

Společně s rozhraním IEnumerator umožňují iteraci prvků ArrayList standardizovaným postupným způsobem, počínaje prvním prvkem a pokračováním vpřed. Příkaz foreach používá metody a vlastnosti rozhraní IEnumerator pro iteraci všech prvků v kolekci.

IEnumerable vs. IEnumerator: Srovnávací graf

Shrnutí IEnumerable verses IEnumerator

Stručně řečeno, IEnumerable a IEnumerator jsou rozhraní používaná k výčtu nebo iteraci třídy, která má sbírkovou povahu, což usnadňuje iterační přístup do vlastní sbírky. IEnumerable je obecné rozhraní dostupné pro objekty typu sbírky a implementací IEnumerable rozhraní generická třída v podstatě umožňuje iteraci prostřednictvím rozhraní IEnumerator. Používá pouze jednu metodu GetEnumerator, která vrátí instanci třídy enumerátoru implementující rozhraní IEnumerator.Rozhraní IEnumerator je určeno k použití jako příslušenství a nelze jej použít k úpravě základní kolekce. Poskytuje dvě abstraktní metody Reset () a MoveNext () a vlastnost Current k volání konkrétního prvku v kolekci.