Rozdiel medzi programom IEnumerable a IEnumerator

Predtým, ako sa dostaneme k rozdielu medzi programami IEnumerable a IEnumerator, najprv pochopme pojmy Enumerator a Enumerable a kedy a prečo ich používať..

Enumerable je modul používaný v triede Array, ktorý vám poskytuje Enumerator. Samotná trieda nie je každá metóda. V skutočnosti používa metódu s názvom 'GetEnumerator', ktorá vám dáva Enumerator na načítanie jeho položky.

Enumerátor je objekt, ktorý vracia každú položku v kolekcii v špecifickom poradí presne tak, ako sa vyžaduje. Kompilátor generuje kód, ktorý používa Enumerator, keď píšete foreach slučku v C #.

IEnumerator je rozhranie implementované enumerátorom a enumerovateľná trieda implementuje IEnumerable interface.

Čo je nespočetné?

IEnumerable je základné rozhranie, ktoré sa používa na získanie objektu, ktorý vie, ako enumerovať (alebo iterovať) nad prvkami v kolekcii..

Je to implementácia vzoru iterátora, ktorý poskytuje mechanizmus na posúvanie objektu v kolekcii bez ohľadu na jeho vnútornú štruktúru. Rozhranie IEnumerable predstavuje objekt, ktorý je možné v kolekcii iterovať.

Používa iba jednu metódu „GetEnumerator“, ktorá vracia inštanciu triedy enumerátora, ktorá implementuje rozhranie IEnumerator.

Čo je Ienumerator?

Rozhranie IEnumerator na druhej strane deklaruje dve metódy - Reset () a MoveNext () - a jednu vlastnosť, Current. MoveNext () vracia booleovskú hodnotu, ktorá označuje koniec zoznamu a pomáha umiestniť prvý prvok v zozname po vyvolaní metódy Reset () - nastaví enumerátor do svojej predvolenej polohy, aby znova opakoval zoznam zo zoznamu. začiatok.

Vlastnosť Current sa dá vyvolať iba prostredníctvom inštancie rozhrania IEnumerator a vracia aktuálny prvok v zozname.

Rozdiel medzi IEnumerable a IEnumerator

Základy IEnumerable a Ienumerator

IEnumerable aj IEnumerator sú rozhrania, ktoré spolu implementujú vzorový návrh softvéru iterátora v .Net Framework. NET Framework umožňuje prístup k jednotlivým prvkom vo vlastnej kolekcii pri implementácii rozhraní IEnumerable a IEnumerator. Rozhranie IEnumerable deklaruje iba jednu metódu nazvanú GetEnumerator, ktorá vracia iný typ rozhrania nazývaného rozhranie IEnumerator pre danú kolekciu. Naproti tomu IEnumerator je základným rozhraním pre všetky ne-generické enumerátory, ktoré sa používajú na čítanie údajov v kolekcii. Číslovače však nemožno použiť na úpravu základnej kolekcie.

metódy

Rozhranie IEnumerable definuje iba jednu metódu GetEnumerator (), ktorá je inštančnou metódou používanou na niekoľkých rôznych typoch kolekcií. Získa iterátor IEnumerátora, ktorý je možné použiť na iteráciu všetkých hodnôt zo zbierky. Keď v C # napíšete slučku foreach v kóde C #, vygeneruje kód, volá metódu GetEnumerator na vytvorenie počítadla používaného slučkou.

Na druhej strane IEnumerator používa dve metódy MoveNext () a Reset () a vlastnosť Current. Metóda MoveNext () presunie čítačku na ďalší prvok kolekcie, zatiaľ čo metóda Reset () nastaví čítačku na predvolenú pozíciu, ktorá je pred prvým prvkom v kolekcii..

uskutočnenie

IEnumerable je generické rozhranie, ktoré poskytuje abstrakciu na opakovanie prvkov a implementáciou IEnumerable rozhrania, generická trieda v podstate umožňuje iteráciu cez rozhranie IEnumerator. Tieto triedy nakoniec poskytnú spoločné rozhranie na získanie inštancie objektu IEnumerator, ktorý podporuje všetky základné sady metód navigácie..

IEnumerator je základné rozhranie pre enumerátory a použitie IEnumerable rozhrania vyžaduje, aby trieda implementovala IEnumerator. Obidve rozhrania je potrebné implementovať, ak chcete poskytovať podporu foreach. Abstraktná trieda „AbstractEnumerator“ implementuje rozhranie IEnumerator.

Funkčnosť IEnumerable a IEnumerator

Rozhranie IEnumerable spolu s podporou rozhrania IEnumerator vám umožňuje iterovať prvky v zásobníku pomocou príkazu 'foreach'. Je to základné rozhranie používané pre objekty typu kolekcie. Iterácia začína horným prvkom v stohu a končí najstarším prvkom v stohu. Jednoducho povedané, predstavuje objekt, ktorý je možné vymenovať.

Spolu s rozhraním IEnumerator umožňujú, aby prvky ArrayList boli iterované štandardizovaným sekvenčným spôsobom, počnúc prvým prvkom a pokračujúc vpred. Príkaz foreach používa metódy a vlastnosti rozhrania IEnumerator na opakovanie všetkých prvkov v kolekcii.

IEnumerable vs. IEnumerator: Tabuľka porovnania

Zhrnutie IEnumerable veršov IEnumerator

Stručne povedané, IEnumerable aj IEnumerator sú rozhrania používané na výpočet alebo iteráciu triedy, ktorá má charakter kolekcie, čo znamená, že uľahčujú iteračný prístup vo vlastnej kolekcii. IEnumerable je všeobecné rozhranie dostupné pre objekty typu kolekcie a implementáciou rozhrania IEnumerable generická trieda v podstate umožňuje iteráciu cez rozhranie IEnumerator. Používa iba jednu metódu GetEnumerator, ktorá vracia inštanciu triedy enumerator, ktorá implementuje rozhranie IEnumerator. Rozhranie IEnumerator je určené na použitie ako prístupové práva a nemôže sa použiť na úpravu základnej kolekcie. Poskytuje dve abstraktné metódy Reset () a MoveNext () a vlastnosť Current na volanie konkrétneho prvku v kolekcii.