Enne kui hakkame uurima erinevust IEnumerable ja IEnumerator vahel, mõelgem kõigepealt mõisteid Enumerator ja Enumerable ning millal ja miks neid kasutada.
Enumerable on Array klassis kasutatav moodul, mis annab teile loendaja. Klass ise ei kasuta iga meetodit. Tegelikult kasutab see meetodit nimega GetEnumerator, mis annab teile loendi oma üksuse toomiseks.
Loendaja on objekt, mis tagastab kogu kollektsiooni konkreetses järjekorras täpselt nii, nagu neid nõutakse. Kompilaator loob koodi, mis kasutab loendurit, kui kirjutate kursisilmuse C # -sse..
IEnumerator on loenduri rakendatud liides ja loendatav klass rakendab IEnumerable liidese.
IEnumerable on põhiliides, mida kasutatakse objekti saamiseks, mis teab, kuidas kogu elemente loetleda (või itereerida).
See on iteraatori mustri rakendamine, mis pakub mehhanismi kollektsiooni objekti läbimiseks sõltumata selle sisemisest struktuurist. Lugematu liides tähistab objekti, mida saab kogudes korrata.
See kasutab ainult ühte meetodit „GetEnumerator”, mis tagastab loenduriklassi eksemplari, mis rakendab IEnumeratori liidese.
IEnumerator-liides deklareerib teistpidi kahte meetodit - Reset () ja MoveNext () - ja ühte atribuuti Current. MoveNext () tagastab tõeväärtuse vale, mis näitab loendi lõppu ja aitab positsioneerida loendi esimese elemendi pärast lähtestusmeetodi () lähtestamist - see seadis loenduri vaikeasendisse, et loendit uuesti itereerida. algus.
Aktuaalset atribuuti saab helistada ainult IEnumeratori liidese kaudu ja see tagastab loendis praeguse elemendi.
Nii IEnumerable kui ka IEnumerator on liidesed, mis rakendavad iteraatori tarkvara kujundamise mustrit .Net Frameworkis koos. .Net Framework võimaldab juurdepääsu kohandatud kogu üksikutele elementidele, rakendades samal ajal liideseid IEnumerable ja IEnumerator. Lugemisliides deklareerib ainult ühe meetodi nimega GetEnumerator, mis tagastab selle konkreetse kollektsiooni jaoks teist tüüpi liidese, mida nimetatakse IEnumeraatori liideseks. IEnumerator on seevastu kõigi liideste loendurite põhiliides, mida kasutatakse kollektsiooni andmete lugemiseks. Loendajaid ei saa siiski kasutada aluskogu muutmiseks.
IEnumerable liides määratleb ainult ühe meetodi GetEnumerator (), mis on esinemisjuhtude meetod, mida kasutatakse mitmel erineval kogutüübil. See saab IEnumerator iteraatori, mida saab kasutada kõigi kollektsiooni väärtuste iteratsiooniks. Kui kirjutate kursisilmuse C # -sse, kutsub selle genereeritav kood GetEnumeratori meetodi, et luua silmuse kasutatav loendaja.
IEnumerator seevastu kasutab kahte meetodit MoveNext () ja Reset () ning omadust Current. Meetod MoveNext () viib loendaja kollektsiooni järgmise elemendi juurde, samas kui meetod Reset () seab loenduri vaikesendisse, mis on enne kogu esimest elementi.
IEnumerable on üldliides, mis pakub abstraktsiooni elementide loopimiseks ja IEnumerable liidese juurutamise abil võimaldab üldklass sisuliselt iteratsiooni IEnumeratori liidese kaudu. Seejuures pakuvad need klassid ühise liidese IEnumerator-objekti eksemplari leidmiseks, mis toetab kõiki navigeerimismeetodite põhikomplekti.
IEnumerator on loendajate põhiliides ja IEnumerable liidese kasutamine eeldab, et klass peab IEnumeratori rakendama. Mõlemad liidesed peavad olema juurutatud, kui soovite pakkuda abi ettekuulutamiseks. Abstraktne klass 'AbstractEnumerator' rakendab IEnumeratori liidest.
IEnumerable-liides koos toetava IEnumerator-liidesega võimaldab iteratsiooni virna elementide kohal kasutada 'foreach' avalduse abil. See on põhiliides, mida kasutatakse kollektsiooni tüüpi objektide jaoks. Iteratsioon algab virnas oleva ülemise elemendiga ja lõpeb virna vanima elemendiga. Lihtsamalt öeldes tähistab see objekti, mida saab loetleda.
Koos IEnumerator-liidesega võimaldavad need ArrayListi elemente korrata standardiseeritud, järjestikuses järjekorras, alustades esimesest elemendist ja liikudes edasi. Foreachi avalduses kasutatakse IEnumeraatori liidese meetodeid ja omadusi, et korrata kõiki kollektsiooni elemente.
Lühidalt, nii IEnumerable kui ka IEnumerator on liidesed, mida kasutatakse klasside loendamiseks või iteratsiooniks, millel on kollektsiooni laad, mis tähendab, et need hõlbustavad iteratiivset juurdepääsu kohandatud kogusse. IEnumerable on üldine liides, mis on saadaval kogumistüüpi objektidele ja IEnumerable liidese rakendamisel võimaldab üldklass sisuliselt iteratsiooni IEnumeratori liidese kaudu. See kasutab ainult ühte meetodit GetEnumerator, mis tagastab loenduriklassi eksemplari, mis rakendab IEnumeratori liidese. IEnumerator-liides on mõeldud kasutamiseks pääsupunktidena ja seda ei saa kasutada aluskogu muutmiseks. See pakub kahte abstraktset meetodit Reset () ja MoveNext () ja omadust Current, et helistada kogumi teatud elemendile.