Mielőtt belépnénk az IEnumerable és az IEnumerator közötti különbségbe, először értsük meg az Enumerator és a Enumerable kifejezéseket, valamint hogy mikor és miért kell őket használni.
Az Enumerable az Array osztályban használt modul, amely megadja az Enumerator programot. Maga az osztály nem mindegyik módszer. Valójában a „GetEnumerator” elnevezésű módszert használja, amely megadja az Enumerator-t az elem letöltéséhez.
Az Enumerator egy objektum, amely a gyűjtemény minden elemét egy meghatározott sorrendben adja vissza, pontosan úgy, ahogyan azt kérték. A fordító generál egy kódot, amely egy Enumerator programot használ, amikor foreach hurkot ír a C # -be..
Az IEnumerator egy felület, amelyet egy számláló valósít meg, és a felsorolható osztály megvalósítja az IEnumerable felületet.
Az IEnumerable egy olyan alapvető felület, amelyet egy olyan objektum előállításához használnak, amely ismeri a gyűjtemény elemeinek felsorolását (vagy iterálását)..
Ez az iterator mintázat megvalósítása, amely mechanizmust biztosít a gyűjtemény egy objektumának áthaladásához, függetlenül annak belső szerkezetétől. Az IEnumerable interfész olyan objektumot képvisel, amely a gyűjteményben iterálható.
Csak egy „GetEnumerator” módszert használ, amely az IEnumerator felületet megvalósító felsoroló osztálypéldányt adja vissza.
Az IEnumerator interfész egyrészt két módszert deklarál - Reset () és MoveNext () -, és egy tulajdonságot, Current. A MoveNext () olyan Boolean vale-t ad vissza, amely jelzi a lista végét, és segít a lista első elemének pozicionálásában a Reset () módszer meghívása után - beállította a felsorolót alapértelmezett helyzetébe úgy, hogy a listát a kezdet.
Az Aktuális tulajdonságot csak az IEnumerator interfész példányán keresztül lehet meghívni, és az aktuális elemet adja vissza a listában.
Az IEnumerable és az IEnumerator egyaránt olyan felületek, amelyek együttesen valósítják meg az iterator szoftvertervezési mintát a .Net keretrendszerben. A .Net Framework lehetővé teszi az egyedi elemek elérését az egyedi gyűjteményben, miközben megvalósítja az IEnumerable és az IEnumerator interfészeket. Az IEnumerable interfész csak egy, a GetEnumerator nevű módszert deklarál, amely egy másik típusú interfészt, az úgynevezett IEnumerator interfészt ad vissza az adott gyűjteményhez. Az IEnumerator viszont az összes nem generikus felsoroló alapfelülete, amely a gyűjtemény adatainak olvasására szolgál. A felsorolók azonban nem használhatók az alapul szolgáló gyűjtemény módosítására.
Az IEnumerable interfész csak egy, a GetEnumerator () metódust határoz meg, amely egy példány módszer, amelyet több különféle gyűjteménytípuson használnak. IEnumerator iterátort kap, amely felhasználható a gyűjtemény összes értékének iterálására. Ha foreach hurkot ír a C # -ba, akkor az általa generált kód meghívja a GetEnumerator metódust a hurok által használt Enumerator létrehozására..
Az IEnumerator viszont két módszert, a MoveNext () és Reset (), valamint a Current tulajdonságot használ. A MoveNext () módszer a felsorolót a gyűjtemény következő elemére viszi, míg a Reset () módszer a felsorolót alapértelmezett helyzetbe állítja, amely a gyűjtemény első elemét megelőzi..
Az IEnumerable egy olyan általános felület, amely absztrakciót nyújt az elemek hurkolásához, és az IEnumerable interfész megvalósításával egy általános osztály lényegében lehetővé teszi az iterációt az IEnumerator interfészen keresztül. Ennek során ezek az osztályok közös felületet biztosítanak egy IEnumerator objektum példányának beolvasásához, amely támogatja a navigációs módszerek összes alapvető készletét.
Az IEnumerator az alapfelület a felsorolók számára, és az IEnumerable interfész használata megköveteli, hogy az osztálynak végre kell hajtania az IEnumerator alkalmazást. Mindkét interfészt be kell építeni, ha támogatást akar nyújtani az előadásokhoz. Az 'AbstractEnumerator' elvont osztály az IEnumerator felületet valósítja meg.
Az IEnumerable interfész és az IEnumerator támogató felülete mellett lehetővé teszi a verem elemeinek iteratálását az 'foreach' utasítás használatával. Ez a gyűjtemény típusú objektumok alapvető felülete. Az iteráció a halom felső elemével kezdődik, és a halom legrégebbi elemével fejeződik be. Egyszerűen fogalmazva, egy objektumot ábrázolhat, amely felsorolható.
Az IEnumerator felülettel együtt lehetővé teszik az ArrayList elemek szabványos, egymást követő módon történő iterálását, az első elemtől kezdve és tovább haladva. Az foreach nyilatkozat az IEnumerator felület módszereit és tulajdonságait használja a gyűjtemény összes elemének iterálására.
Dióhéjban, mind az IEnumerable, mind az IEnumerator olyan felületek, amelyek egy osztály felsorolására vagy iterálására szolgálnak, amelynek gyűjtemény jellegű, azaz elősegítik az iteratív hozzáférést az egyedi gyűjteményben. Az IEnumerable az az általános felület, amely a gyűjtemény típusú objektumokhoz elérhető, és az IEnumerable interfész megvalósításával egy általános osztály lényegében lehetővé teszi az iterációt az IEnumerator felületen keresztül. Csak egy olyan módszert használ, amellyel a GetEnumerator visszaadja az IEnumerator felületet megvalósító felsoroló osztálypéldányt. Az IEnumerator interfészt hozzáférőkként kell használni, és nem használható az alapul szolgáló gyűjtemény módosítására. Két elvont módszert biztosít: Reset () és MoveNext (), valamint egy Current tulajdonságot, amely a gyűjtemény adott elemének meghívására szolgál..