Før vi hopper inn i forskjellen mellom IEnumerable og IEnumerator, la oss først forstå vilkårene Enumerator og Enumerable og når og hvorfor bruke dem.
Enumerable er en modul som brukes i Array-klassen som gir deg Enumerator. Klassen i seg selv gjør ikke hver metode. Faktisk bruker den en metode som heter 'GetEnumerator' som gir deg en Enumerator for å hente elementet.
En Enumerator er et objekt som returnerer hvert element i en samling i en bestemt rekkefølge, akkurat som de blir bedt om. Kompilatoren genererer kode som bruker en Enumerator, når du skriver en foreach-loop i C #.
IEnumerator er et grensesnitt implementert av en opptaker og den utallige klassen implementerer det IEnumerable grensesnittet.
IEnumerable er et grunnleggende grensesnitt som brukes til å skaffe et objekt som vet hvordan man kan oppregne (eller iterere) over elementene i samlingen.
Det er en implementering av iteratormønsteret som gir en mekanisme for å krysse et objekt i samlingen uavhengig av den interne strukturen. IEnumerable-grensesnittet representerer en gjenstand som kan bli iterert over i en samling.
Den bruker bare en metode "GetEnumerator" som returnerer en oppsummeringsklasse-instans som implementerer IEnumerator-grensesnitt.
IEnumerator-grensesnittet, derimot, erklærer to metoder - Reset () og MoveNext () - og en egenskap, Current. The MoveNext () returnerer en boolsk vale som indikerer slutten av listen, og hjelper til med å plassere det første elementet i listen etter å ha kalibrert Reset () -metoden - det stiller opptaleren til standardposisjonen, slik at listen på nytt blir gjengitt fra begynnelse.
Nåværende egenskap kan bare kalles gjennom en forekomst av IEnumerator-grensesnittet, og den returnerer gjeldende element i listen.
Både IEnumerable og IEnumerator er grensesnitt som implementerer iteratorprogramvaremønsteret i .Net Framework sammen. .Net Framework gjør tilgang til individuelle elementer i den egendefinerte samlingen mens du implementerer IEnumerable og IEnumerator-grensesnitt. IEnumerable-grensesnittet erklærer bare en metode som heter GetEnumerator, som returnerer en annen type grensesnitt kalt IEnumerator-grensesnittet for den aktuelle samlingen. IEnumerator, derimot, er grensesnittgrensesnittet for alle ikke-generiske enumeratorer som brukes til å lese dataene i samlingen. Enumeratorer kan imidlertid ikke brukes til å endre den underliggende samlingen.
IEnumerable grensesnitt definerer bare en metode GetEnumerator () som er en instansmetode som brukes på flere forskjellige samlingstyper. Det blir en IEnumerator iterator som kan brukes til å iterere over alle verdiene fra samlingen. Når du skriver en foreakssløyfe i C #, koden den genererer, kalles GetEnumerator-metoden for å opprette Enumeratoren som brukes av sløyfen.
IEnumerator bruker derimot to metoder MoveNext () og Reset () og en egenskap Current. Metoden MoveNext () tar telleren til neste element i samlingen, mens Reset () -metoden setter tallet til standardposisjonen som er før det første elementet i samlingen.
IEnumerable er et generisk grensesnitt som gir en abstraksjon for looping over elementer og ved å implementere IEnumerable-grensesnittet, gjør en generisk klasse i det vesentlige iterasjon via IEnumerator-grensesnittet. Da blir disse klassene en felles grensesnitt for å hente en forekomst av et IEnumerator-objekt som støtter alle de grunnleggende settene med navigasjonsmetoder.
IEnumerator er grensesnittgrensesnittet for enumeratorer, og bruken av IEnumerable grensesnitt krever at klassen må implementere IEnumerator. Begge grensesnittene må implementeres, hvis du vil gi støtte til foreach. Den abstrakte klassen 'AbstractEnumerator' implementerer IEnumerator-grensesnittet.
IEnumerable-grensesnittet, sammen med støtter IEnumerator-grensesnittet, lar deg iterere over elementene i stakken ved hjelp av foreach-setningen. Det er det grunnleggende grensesnittet som brukes til samlingstypeobjekter. Iterasjonen begynner med toppelementet i stabelen og slutter med det eldste elementet i stabelen. Enkelt sagt, representerer det et objekt som kan opplistes.
Sammen med IEnumerator-grensesnittet aktiverer de ArrayList-elementene iterert på en standardisert, sekvensiell måte, som starter med det første elementet og fremover. Foreach-setningen bruker metodene og egenskapene til IEnumerator-grensesnittet for å gjenskape alle elementene i en samling.
I et nøtteskall er både IEnumerable og IEnumerator grensesnitt som brukes til å oppsummere eller iterere en klasse som har en samlings natur som betyr at de letter iterativ tilgang i en tilpasset samling. IEnumerable er det generiske grensesnittet tilgjengelig for samlingstypeobjekter, og ved å implementere IEnumerable-grensesnittet muliggjør en generisk klasse i det vesentlige iterasjon via IEnumerator-grensesnittet. Den bruker bare en metode GetEnumerator som returnerer en oppsummeringsklasse-instans som implementerer IEnumerator-grensesnitt. IEnumerator-grensesnittet er ment å brukes som accessors, og det kan ikke brukes til å endre den underliggende samlingen. Den gir to abstrakte metoder Reset () og MoveNext (), og en egenskap Aktuell for å ringe et bestemt element i en samling.