Pirms mēs iedziļināmies atšķirībā starp IEnumerable un IEnumerator, vispirms sapratīsim terminus Enumerator un Enumerable, kā arī kad un kāpēc tos lietot.
Enumerable ir modulis, ko izmanto Array klasē un kas dod jums Enumerator. Pati klase neder katrai metodei. Faktiski tas izmanto metodi ar nosaukumu 'GetEnumerator', kas dod jums Enumerator, lai izgūtu tā vienumu.
Skaitītājs ir objekts, kas katru kolekcijas vienību atdod noteiktā secībā tieši tā, kā tie tiek pieprasīti. Kompilators ģenerē kodu, kas izmanto skaitītāju, rakstot foreach cilpu C #.
IEnumerator ir saskarne, ko īsteno skaitītājs, un uzskaitāmā klase realizē IEnumerable saskarni.
IEnumerable ir pamata saskarne, kuru izmanto objekta iegūšanai, kurš zina, kā uzskaitīt (vai atkārtot) kolekcijas elementus.
Tas ir iteratora modeļa ieviešana, kas nodrošina mehānismu objekta šķērsošanai kolekcijā neatkarīgi no tā iekšējās struktūras. Neskaitāmā saskarne apzīmē objektu, ko var atkārtot kolekcijā.
Tas izmanto tikai vienu metodi “GetEnumerator”, kas atgriež skaitītāju klases gadījumu, kas ievieš IEnumerator interfeisu.
IEnumerator interfeiss, no vienas puses, deklarē divas metodes - Reset () un MoveNext () - un vienu rekvizītu Current. MoveNext () atgriež Būla ieleju, kas norāda saraksta beigas un palīdz pozicionēt pirmo elementu sarakstā pēc Reset () metodes izsaukšanas - tā iestatīja skaitītāju noklusējuma pozīcijā, lai sarakstu atkārtotu no sākums.
Pašreizējo īpašumu var izsaukt tikai ar IEnumerator interfeisa instanci, un tas atgriež pašreizējo elementu sarakstā.
Gan IEnumerable, gan IEnumerator ir saskarnes, kas kopā īsteno iteratoru programmatūras projektēšanas modeli .Net Framework. .NET Framework ļauj piekļūt atsevišķiem elementiem pielāgotajā kolekcijā, vienlaikus ieviešot IEnumerable un IEnumerator saskarnes. Skaitļa saskarne deklarē tikai vienu metodi ar nosaukumu GetEnumerator, kas atgriež cita veida saskarni, ko sauc par IEnumerator saskarni konkrētajai kolekcijai. IEnumerator, no otras puses, ir bāzes saskarne visiem nepatentētajiem skaitītājiem, kurus izmanto, lai nolasītu datus kolekcijā. Tomēr uzskaitītājus nevar izmantot pamatā esošās kolekcijas modificēšanai.
IEnumerable interfeiss definē tikai vienu metodi GetEnumerator (), kas ir instanču metode, ko izmanto vairākiem dažādiem kolekcijas veidiem. Tas iegūst IEnumerator iteratoru, ko var izmantot, lai atkārtotu visas kolekcijas vērtības. Rakstot foreach cilpu C #, tās ģenerētais kods izsauc metodi GetEnumerator, lai izveidotu cilpu izmantoto skaitītāju..
IEnumerator, no otras puses, izmanto divas metodes MoveNext () un Reset () un rekvizītu Current. Izmantojot metodi MoveNext (), skaitītājs tiek pārvietots uz nākamo kolekcijas elementu, turpretī Reset () metode ieskaita skaitītāju noklusējuma pozīcijā, kas ir pirms pirmā kolekcijas elementa..
IEnumerable ir vispārējs interfeiss, kas nodrošina abstrakciju, lai atdalītu elementus, un, ieviešot IEnumerable saskarni, vispārīga klase būtībā ļauj atkārtot, izmantojot IEnumerator saskarni. To darot, šīs klases galu galā nodrošina kopēju saskarni IEnumerator objekta gadījuma izgūšanai, kas atbalsta visus navigācijas metožu pamatkopus..
IEnumerator ir skaitītāju bāzes saskarne, un, lai izmantotu IEnumerable saskarni, klasei ir jāievieš IEnumerator. Abas saskarnes ir jāievieš, ja vēlaties sniegt atbalstu sludināšanai. Abstraktā klase 'AbstractEnumerator' īsteno IEnumerator saskarni.
IEnumerable saskarne kopā ar atbalsta IEnumerator saskarni ļauj atkārtot kaudzē esošos elementus, izmantojot “foreach” paziņojumu. Tā ir pamata saskarne, ko izmanto kolekcijas tipa objektiem. Ierācija sākas ar augšējo elementu kaudzē un beidzas ar vecāko elementu kaudzē. Vienkārši sakot, tas apzīmē objektu, kuru var uzskaitīt.
Kopā ar IEnumerator saskarni tie ļauj ArrayList elementus atkārtot standartizētā secībā, sākot ar pirmo elementu un virzoties uz priekšu. Foreach paziņojumā tiek izmantotas IEnumerator saskarnes metodes un īpašības, lai atkārtotu visus kolekcijas elementus.
Īsumā gan IEnumerable, gan IEnumerator ir saskarnes, ko izmanto, lai uzskaitītu vai atkārtotu klasi, kurai ir kolekcijas raksturs, kas nozīmē, ka tās atvieglo atkārtotu piekļuvi pielāgotajai kolekcijai. IEnumerable ir vispārējs interfeiss, kas pieejams kolekcijas tipa objektiem, un, ieviešot IEnumerable interfeisu, vispārīga klase būtībā ļauj atkārtot, izmantojot IEnumerator saskarni. Tas izmanto tikai vienu metodi GetEnumerator, kas atdod skaitītāju klases gadījumu, kas ievieš IEnumerator saskarni. IEnumerator saskarne ir paredzēta izmantošanai kā piekļuves līdzekļi, un to nevar izmantot pamata kolekcijas modificēšanai. Tas nodrošina divas abstraktas metodes Reset () un MoveNext () un īpašumu Current, lai izsauktu konkrētu elementu kolekcijā.