Innan vi hoppar in i skillnaden mellan IEnumerable och IEnumerator, låt oss först förstå termerna Enumerator och Enumerable och när och varför använda dem.
Enumerable är en modul som används i Array-klassen som ger dig Enumerator. Klassen i sig gör inte varje metod. Faktum är att det använder en metod som heter "GetEnumerator" som ger dig en uppräknare för att hämta dess föremål.
En uppräknare är ett objekt som returnerar varje objekt i en samling i en viss ordning, precis som de begärs. Kompilatorn alstrar kod som använder en uppräknare, när du skriver en spolslinga i C #.
IEnumerator är ett gränssnitt som implementeras av en uppräknare och den uppräknade klassen implementerar det IEnumerable gränssnittet.
IEnumerable är ett grundläggande gränssnitt som används för att erhålla ett objekt som kan tolka (eller iterera) över elementen i samlingen.
Det är en implementering av iteratormönstret som ger en mekanism för att korsa ett objekt i samlingen oavsett dess interna struktur. Det IEnumerable gränssnittet representerar ett objekt som kan itereras över i en samling.
Det använder bara en metod "GetEnumerator" som returnerar en uppräkningsklass förekomst som implementerar IEnumerator gränssnitt.
IEnumerator-gränssnittet, å andra sidan, förklarar två metoder - Återställ () och FlyttaNext () - och en egenskap, Aktuell. MoveNext () returnerar en Boolean vale som indikerar slutet av listan och hjälper till att placera det första elementet i listan efter att ha kallat Reset () -metoden - det ställer uppräkaren till sin standardposition så att den re-itererar listan från början.
Den nuvarande egenskapen kan endast ringas via en instans av IEnumerator-gränssnittet och returnerar det aktuella elementet i listan.
Både IEnumerable och IEnumerator är gränssnitt som implementerar iteratorprogrammets mönster i .Net Framework tillsammans. . NET Framework gör det möjligt att komma åt enskilda element i den anpassade samlingen medan man implementerar IEnumerable och IEnumerator gränssnitt. IEnumerable gränssnittet deklarerar bara en metod som heter GetEnumerator som returnerar en annan typ av gränssnitt som kallas IEnumerator gränssnittet för den speciella samlingen. IEnumerator är å andra sidan basgränssnittet för alla icke-generiska uppräknare som används för att läsa data i samlingen. Menumeratorer kan inte användas för att ändra den underliggande samlingen.
IEnumerable gränssnitt definierar bara en metod GetEnumerator () som är en förekomstmetod som används i flera olika samlingstyper. Det får en IEnumerator iterator som kan användas för att iterera över alla värden från samlingen. När du skriver en foreach-loop i C # kodar den genererar kallar GetEnumerator-metoden för att skapa enumeratorn som används av slingan.
IEnumerator använder å andra sidan två metoder MoveNext () och Reset () och en egenskap Current. Metoden MoveNext () tar uppräknaren till nästa element i samlingen, medan Reset () -metoden sätter uppräknaren till sin standardposition som ligger före det första elementet i samlingen.
IEnumerable är ett generiskt gränssnitt som ger en abstraktion för looping över element och genom att implementera IEnumerable gränssnittet möjliggör en generisk klass i huvudsak iteration via IEnumerator-gränssnittet. Därefter slutar dessa klasser att ge ett gemensamt gränssnitt för att hämta en förekomst av ett IEnumerator-objekt som stöder all den grundläggande uppsättningen navigationsmetoder.
IEnumerator är basgränssnittet för uppräknare och användningen av IEnumerable interface kräver att klassen måste implementera IEnumerator. Båda gränssnitten måste genomföras, om du vill ge stöd till förhand. Den abstrakta klassen "AbstractEnumerator" implementerar IEnumerator-gränssnittet.
IEnumerable-gränssnittet, tillsammans med stödjande IEnumerator-gränssnitt, låter dig iterera över elementen i stapeln med hjälp av "foreach" -förklaringen. Det är det grundläggande gränssnittet som används för insamlingstypobjekt. Iterationen börjar med toppelementet i stapeln och slutar med det äldsta elementet i stapeln. Enkelt uttryckt representerar det ett objekt som kan räknas upp.
Tillsammans med IEnumerator-gränssnittet aktiverar de ArrayList-elementen i ett standardiserat, sekventiellt sätt, som börjar med det första elementet och framåt. Foreach-satsen använder metoderna och egenskaperna för IEnumerator-gränssnittet för att iterera alla element i en samling.
I ett nötskal är både IEnumerable och IEnumerator gränssnitt som används för att räkna upp eller iterera en klass som har en samlings natur vilket innebär att de underlättar iterativ åtkomst i en anpassad samling. IEnumerable är det generiska gränssnittet tillgängligt för insamlingstypobjekt och genom att implementera det IEnumerable gränssnittet möjliggör en generisk klass i huvudsak iteration via IEnumerator-gränssnittet. Det använder bara en metod GetEnumerator som returnerar en uppräkningsklass förekomst som implementerar IEnumerator gränssnitt. IEnumerator gränssnitt är tänkt att användas som accessors och det kan inte användas för att ändra den underliggande samlingen. Det ger två abstrakta metoder Reset () och MoveNext (), och en egenskap Aktuell för att ringa ett visst element i en samling.