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 ole iga meetod. 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 genereerib koodi, mis kasutab loendurit, kui kirjutate kursisilmuse C # -sse.

IEnumerator on loenduri rakendatud liides ja loendatav klass rakendab IEnumerable liidese.

Mis on loendamatu?

IEnumerable on põhiliides, mida kasutatakse objekti saamiseks, mis teab, kuidas kollektsiooni elemente loetleda (või itereerida).

See on iteraatori mustri rakendamine, mis pakub mehhanismi kollektsioonis oleva objekti liikumiseks, olenemata selle sisestruktuurist. Lugematu liides tähistab objekti, mida saab kogudes korrata.

See kasutab ainult ühte meetodit „GetEnumerator”, mis tagastab loenduriklassi eksemplari, mis rakendab IEnumeratori liidese.

Mis on nummerdaja?

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.

Erinevus loendamatu ja loendaja vahel

Lugematu ja loendaja alused

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 ühte meetodit nimega GetEnumerator, mis tagastab selle konkreetse kollektsiooni jaoks teist tüüpi liidese, mida nimetatakse IEnumeratori liideseks. IEnumerator on seevastu kõigi liideste loendurite põhiliides, mida kasutatakse kollektsiooni andmete lugemiseks. Loendajaid ei saa siiski kasutada aluskogu muutmiseks.

Meetodid

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 loendur.

IEnumerator seevastu kasutab kahte meetodit MoveNext () ja Reset () ning omadust Current. Meetod MoveNext () viib loendaja kollektsiooni järgmise elemendi juurde, seevastu meetod Reset () seab loenduri vaikesendisse, mis on enne kogu esimest elementi.

Rakendamine

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 toomiseks, mis toetab kõiki põhilisi navigeerimismeetodite komplekte.

IEnumerator on loendajate põhiliides ja IEnumerable liidese kasutamine eeldab, et klass peab IEnumeratori rakendama. Mõlemad liidesed tuleb juurutada, kui soovite tugiteenuseid osutada. Abstraktne klass „AbstractEnumerator” rakendab liidese IEnumerator.

Lugeja ja loendaja funktsionaalsus

IEnumerable-liides koos toetava IEnumerator-liidesega võimaldab teil virnata elementide üle virnas, kasutades käsku 'foreach'. 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ärjestikuse moodusega, alustades esimesest elemendist ja liikudes edasi. Foreachi avalduses kasutatakse IEnumeraatori liidese meetodeid ja omadusi, et korrata kõiki kollektsiooni elemente.

Lugematu arv ja loendaja: võrdlusdiagramm

Lugematute värsside kokkuvõte

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 kogule. IEnumerable on üldine liides, mis on saadaval kogumistüüpi objektidele ja IEnumerable liidese juurutamise abil 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 kindlale elemendile.

Viited

  • Kujutise krediit: https://en.wikipedia.org/wiki/Read-copy-update#/media/File:Rcu_api.jpg
  • Kujutise krediit: https://upload.wikimedia.org/wikipedia/commons/1/17/C_Sharp_Code.PNG
  • Grand, Mark ja Brad Merrill. Visuaalse põhikujunduse mustrid. New Jersey: John Wiley & Sons, 2005. Trükk
  • Kuld, Tod. Professionaalne .Net 2.0 Generics. New Jersey: John Wiley & Sons, 2005. Trükk
  • Miller, Rick. C # kollektsioonid: üksikasjalik esitlus. Virginia: Pulp Free Press, 2012. Trükk