Inden vi springer ind i forskellen mellem IEnumerable og IEnumerator, lad os først forstå udtrykkene Enumerator og Enumerable, og hvornår og hvorfor vi skal bruge dem.
Enumerable er et modul, der bruges i Array-klassen, der giver dig Enumerator. Klassen i sig selv gør ikke hver metode. Faktisk bruger den en metode kaldet 'GetEnumerator', der giver dig en tæller til at hente sin vare.
En tæller er et objekt, der returnerer hvert element i en samling i en bestemt rækkefølge, nøjagtigt som det anmodes om. Compileren genererer kode, der bruger en Enumerator, når du skriver en foreach-loop i C #.
IEnumerator er en grænseflade implementeret af en tæller, og den tællbare klasse implementerer IEnumerable interface.
IEnumerable er en grundlæggende grænseflade, der bruges til at få et objekt, der ved, hvordan man optæller (eller itererer) over elementerne i samlingen.
Det er en implementering af iteratormønsteret, der giver en mekanisme til at krydse et objekt i samlingen uanset dens interne struktur. IEnumerable-grænsefladen repræsenterer et objekt, der kan itereres over i en samling.
Den bruger kun én metode “GetEnumerator”, der returnerer en forekomst af tællerklasse, der implementerer IEnumerator-interface.
IEnumerator-interface, den ene på den anden side, erklærer to metoder - Reset () og MoveNext () - og en egenskab, Current. MoveNext () returnerer en boolsk vale, der angiver slutningen af listen og hjælper med at placere det første element på listen efter at have ringet til Reset () -metoden - det indstiller tælleren til sin standardposition, så for at re-iterere listen fra starten.
Den aktuelle egenskab kan kun kaldes via en forekomst af IEnumerator-grænsefladen, og den returnerer det aktuelle element på listen.
Både IEnumerable og IEnumerator er grænseflader, der implementerer iteratorsoftwaredesignmønsteret i .Net Framework sammen. .Net Framework giver adgang til individuelle elementer i den brugerdefinerede samling, mens du implementerer IEnumerable og IEnumerator-grænseflader. IEnumerable interface erklærer kun en metode kaldet GetEnumerator, der returnerer en anden type interface kaldet IEnumerator interface til den pågældende samling. IEnumerator er på den anden side basisgrænsefladen for alle ikke-generiske tællere, der bruges til at læse dataene i samlingen. Tællere kan imidlertid ikke bruges til at ændre den underliggende samling.
IEnumerable interface definerer kun en metode GetEnumerator (), som er en forekomstmetode, der bruges på flere forskellige samlingstyper. Det får en IEnumerator-iterator, der kan bruges til at itereere over alle værdier fra samlingen. Når du skriver en foreach-loop i C #, kalder den kode, den genererer, GetEnumerator-metoden for at oprette den tæller, der bruges af loopen.
IEnumerator bruger på den anden side to metoder MoveNext () og Reset () og en egenskab Current. Metoden MoveNext () bringer tælleren til det næste element i samlingen, mens Reset () -metoden sætter tælleren til sin standardposition, der ligger foran det første element i samlingen.
IEnumerable er en generisk grænseflade, der giver en abstraktion til looping over elementer og ved at implementere IEnumerable interface, en generisk klasse muliggør i det væsentlige iteration via IEnumerator interface. Dermed leverer disse klasser en fælles grænseflade til at hente et eksempel på et IEnumerator-objekt, der understøtter alle de grundlæggende sæt navigationsmetoder.
IEnumerator er basisgrænsefladen for tællere, og brugen af IEnumerable interface kræver, at klassen skal implementere IEnumerator. Begge grænseflader skal implementeres, hvis du vil give support til foreach. Den abstrakte klasse 'AbstractEnumerator' implementerer IEnumerator-interface.
IEnumerable-interface, sammen med understøttende IEnumerator-interface, giver dig mulighed for at iterere over elementerne i stakken ved hjælp af 'foreach'-sætningen. Det er den grundlæggende grænseflade, der bruges til objekter af samlingstype. Iterationen begynder med det øverste element i stakken og slutter med det ældste element i stakken. Kort sagt repræsenterer det et objekt, der kan tælles op.
Sammen med IEnumerator-interface giver de ArrayList-elementerne mulighed for at iteres på en standardiseret, sekventiel måde, startende med det første element og gå fremad. Foreach-sætningen bruger metoderne og egenskaberne i IEnumerator-interface til at itereere alle elementer i en samling.
I et nøddeskal er både IEnumerable og IEnumerator grænseflader, der bruges til at opregne eller itereere en klasse, der har en samlingskarakter, hvilket betyder, at de letter iterativ adgang i en brugerdefineret samling. IEnumerable er den generiske grænseflade, der er tilgængelig for objekter af samlingstype, og ved at implementere IEnumerable-interface muliggør en generisk klasse i det væsentlige iteration via IEnumerator-interface. Den bruger kun en metode GetEnumerator, der returnerer en forekomst af tællerklasse, der implementerer IEnumerator-interface. IEnumerator-interface er beregnet til at blive brugt som accessorer, og det kan ikke bruges til at ændre den underliggende samling. Det giver to abstrakte metoder Nulstil () og MoveNext (), og en egenskab Aktuel for at kalde et bestemt element i en samling.