Prieš pradėdami aiškinti skirtumą tarp „Skaičiuoti“ ir „Skaičiuoti“, pirmiausia leiskite suprasti „Enumerator“ ir „Enumerable“ terminus ir kada bei kodėl juos naudoti.
„Enumerable“ yra „Array“ klasėje naudojamas modulis, suteikiantis „Enumerator“. Pati klasė nėra kiekvienas metodas. Tiesą sakant, jis naudoja metodą, vadinamą „GetEnumerator“, kuris suteikia Enumeratoriui nuskaityti jo elementą.
Enumerator yra objektas, kuris grąžina kiekvieną kolekcijos elementą tam tikra tvarka, tiksliai taip, kaip jų reikalaujama. Kompiliatorius sugeneruoja kodą, kuriame naudojamas Enumerator, kai rašote foreach kilpa C #.
„Skaičiuoklė“ yra sąsaja, kurią įgyvendina skaitiklis, o surašoma klasė įgyvendina „Skaičiuoklių sąsaja“.
„IEnumerable“ yra pagrindinė sąsaja, naudojama objektui gauti, kuris žino, kaip išvardyti (ar itetruoti) kolekcijos elementus.
Tai yra iteratoriaus modelio įgyvendinimas, kuris suteikia mechanizmą, leidžiantį apeiti kolekcijos objektą, nepaisant jo vidinės struktūros. Skaičiuojama sąsaja žymi objektą, kurį galima pakartoti kolekcijoje.
Jis naudoja tik vieną metodą „GetEnumerator“, kuris grąžina sąrašo klasės egzempliorių, įgyvendinantį „IEnumerator“ sąsają.
„IEnumerator“ sąsaja, viena vertus, deklaruoja du metodus - „Reset“ () ir „MoveNext“ () - ir vieną ypatybę „Current“. „MoveNext“ () grąžina loginę vertę, nurodančią sąrašo pabaigą ir padedančią išdėstyti pirmąjį sąrašo elementą, paskambinus Reset () metodu - jis nustatė, kad surašytuvas bus numatytoje padėtyje, kad sąrašą pakartotų iš naujo. pradžios.
Dabartinė savybė gali būti iškviečiama tik per „IEnumerator“ sąsajos egzempliorių ir ji grąžina dabartinį elementą sąraše.
Ir „IEnumerable“, ir „IEnumerator“ yra sąsajos, kurios kartu įgyvendina iteratoriaus programinės įrangos projektavimo modelį .Net Framework. „.Net Framework“ suteikia prieigą prie atskirų pasirinktinės kolekcijos elementų, įgyvendinant „IEnumerable“ ir „IEnumerator“ sąsajas. Skaičiuojama sąsaja deklaruoja tik vieną metodą, vadinamą „GetEnumerator“, kuris grąžina kito tipo sąsają, vadinamą „IEnumerator“ sąsaja, tam tikrai kolekcijai. Kita vertus, „IEnumerator“ yra pagrindinė sąsaja visiems nepatentuotiems skaitikliams, naudojamiems kolekcijos duomenims skaityti. Tačiau surašinėtojai negali būti naudojami pagrindinei kolekcijai modifikuoti.
„IEnumerable“ sąsaja apibūdina tik vieną „GetEnumerator“ () metodą, kuris yra egzempliorių metodas, naudojamas keliems skirtingiems kolekcijos tipams. Gaunamas „IEnumerator“ iteratorius, kurį galima naudoti norint pakartoti visas kolekcijos reikšmes. Kai C # rašote įžvalgos kilpą, jos sugeneruotas kodas iškviečia „GetEnumerator“ metodą, kad būtų sukurtas „Enumerator“, kurį naudoja kilpa..
„IEnumerator“, kita vertus, naudoja du metodus „MoveNext“ () ir „Reset“ () bei ypatybę „Current“. Metodas „MoveNext ()“ įtraukia skaitiklį į kitą kolekcijos elementą, tuo tarpu „Reset ()“ metodas nustato numeruotoją į numatytąją padėtį, kuri yra prieš pirmąjį kolekcijos elementą..
„IEnumerable“ yra bendroji sąsaja, teikianti abstrakciją, leidžiančią aptikti elementus, o įgyvendinant „IEnumerable“ sąsają, bendroji klasė iš esmės įgalina iteraciją per „IEnumerator“ sąsają. Tai darant, šios klasės suteikia bendrą sąsają IEnumerator objekto, kuris palaiko visus pagrindinius naršymo metodų rinkinius, egzemplioriui nuskaityti..
„Skaičiuoklė“ yra pagrindinė sąsaja surašinėtojams, o norint naudoti „Skaičiuotinų“ sąsają reikia, kad klasė turėtų įgyvendinti „Skaičiuoklę“. Reikia įdiegti abi sąsajas, jei norite suteikti priekabiavimą. Abstraktioji klasė „AbstractEnumerator“ įgyvendina „IEnumerator“ sąsają.
Skaičiuotina sąsaja kartu su palaikančiąja „IEnumerator“ sąsaja leidžia pakartoti krūvos elementus naudojant „foreach“ teiginį. Tai yra pagrindinė sąsaja, naudojama kolekcijos tipo objektams. Iteracija prasideda viršutiniu kamino elementu ir baigiasi seniausiu kamino elementu. Paprasčiau tariant, tai yra objektas, kurį galima išvardyti.
Kartu su „IEnumerator“ sąsaja jie įgalina „ArrayList“ elementus pakartoti standartizuotai, nuosekliai, pradedant nuo pirmojo elemento ir einant į priekį. Foreach teiginyje naudojami „IEnumerator“ sąsajos metodai ir savybės, kad būtų pakartoti visi kolekcijos elementai.
Trumpai tariant, tiek „Skaičiuotina“, tiek „Skaičiuoklė“ yra sąsajos, naudojamos klasifikuoti ar kartoti klasę, kuri turi kolekcijos pobūdį, ty jos palengvina pakartotinę prieigą prie pasirinktinės kolekcijos. „IEnumerable“ yra bendroji sąsaja, prieinama kolekcijos tipo objektams. Įdiegus „IEnumerable“ sąsają, bendroji klasė iš esmės įgalina iteraciją per „IEnumerator“ sąsają. Jis naudoja tik vieną metodą „GetEnumerator“, kuris grąžina sąrašo klasės egzempliorių, įgyvendinantį „IEnumerator“ sąsają. „IEnumerator“ sąsaja skirta naudoti kaip prieigą ir jos negalima naudoti pagrindinei kolekcijai modifikuoti. Tai pateikia du abstrakčius metodus Reset () ir MoveNext () ir ypatybę Current, kad būtų galima paskambinti tam tikram kolekcijos elementui..