Hisoblagich va hisoblagich o'rtasidagi farqga o'tishdan oldin, avval Enumer va Enumerable atamalarini va ulardan qachon va nima uchun foydalanish kerakligini tushunib olaylik.

Enumerable - bu Array sinfida ishlatiladigan modul bo'lib, u sizga Hisoblagichni beradi. Sinfning o'zi har bir usulni o'z ichiga olmaydi. Aslida, unda "GetEnumerator" deb nomlangan usul qo'llaniladi, bu sizga o'z elementini olish uchun Hisoblagichni beradi.

Hisoblagich bu to'plamdagi har bir elementni talab qilinganidek qaytaradigan ob'ektdir. Kompilyator C # da oldingi qatorni yozganda, Hisoblagichdan foydalanadigan kodni yaratadi.

IEnumerator - bu hisoblagich tomonidan amalga oshiriladigan interfeys va sanab o'tilgan sinf IEnumerable interfeysini amalga oshiradi.

Sanab bo'lmaydigan nima?

IEnumerable - bu to'plamdagi elementlar ustidan qanday (yoki takrorlashni) bilishni biladigan ob'ektni olish uchun ishlatiladigan asosiy interfeys.

Bu to'plamdagi ob'ektni ichki tuzilishidan qat'i nazar, uni kesib o'tish mexanizmini ta'minlaydigan iterator naqshining amalga oshirilishidir. IEnumerable interfeysi to'plamda takrorlanadigan ob'ektni anglatadi.

Unda faqat bitta "GetEnumerator" usulidan foydalaniladi, bu IEnumerator interfeysini amalga oshiruvchi hisoblash klassi namunasini qaytaradi.

Ienumerator nima?

Boshqa tomondan IEnumerator interfeysi ikkita usulni e'lon qiladi - Reset () va MoveNext () - va bitta xususiyat, Current. MoveNext () ro'yxat oxirini ko'rsatuvchi Boolean vale-ni qaytaradi va Reset () usulini chaqirgandan so'ng ro'yxatdagi birinchi elementni joylashtirishga yordam beradi - u ro'yxatni qayta iteratsiya qilish uchun hisoblagichni asl holatiga o'rnatdi. boshlanishi.

Joriy xususiyatga faqat IEnumerator interfeysi misolida qo'ng'iroq qilish mumkin va u ro'yxatdagi joriy elementni qaytaradi.

Hisoblagich va IEgumator o'rtasidagi farq

Hisoblanuvchi va Ienumerator asoslari

IEnumerable va IEnumerator ikkalasi ham .Net Framework-da birgalikda iterator dasturiy ta'minotini tuzish naqshini amalga oshiradigan interfeyslardir. .Net Framework IEnumerable va IEnumerator interfeyslarini amalga oshirishda shaxsiy to'plamdagi alohida elementlarga kirishni ta'minlaydi. IEnumerable interfeysi faqatgina GetEnumerator deb nomlangan bitta usulni e'lon qiladi, bu o'sha to'plam uchun IEnumerator interfeysi deb nomlangan boshqa turdagi interfeysni qaytaradi. O'z navbatida, I-Enumerator to'plamdagi ma'lumotlarni o'qish uchun ishlatiladigan barcha generatsion bo'lmagan hisoblovchilar uchun asosiy interfeysdir. Biroq, hisoblagichlardan asosiy to'plamni o'zgartirish uchun foydalanib bo'lmaydi.

Usullari

IEnumerable interfeysi faqat bitta usulni aniqlaydi GetEnumerator (), bu bir nechta turli xil yig'ish turlarida ishlatiladigan namunaviy usul. U to'plamdagi barcha qiymatlarni takrorlash uchun ishlatilishi mumkin bo'lgan IEUMERator iteratorini oladi. Agar siz C # kodiga predikatorni yozsangiz, u yaratadigan kod GetEnumerator usulidan foydalanib, pastadir tomonidan ishlatiladigan Enumeratorni yaratish uchun chaqiradi.

O'z navbatida, hisoblagich MoveNext () va Reset () ikkita usulidan va Current xususiyatidan foydalanadi. MoveNext () usuli hisoblagichni to'plamning keyingi elementiga o'tkazadi, Reset () usuli esa hisoblovchini to'plamdagi birinchi element oldidagi holatiga o'rnatadi.

Amalga oshirish

IEnumerable - bu elementlarni qaytarish uchun abstraksiya beradigan va IEnumerable interfeysini ishlatib, umumiy sinf IEnumerator interfeysi orqali iteratsiyani ta'minlaydigan umumiy interfeys. Shunday qilib, ushbu sinflar navigatsiya usullarining barcha asosiy to'plamini qo'llab-quvvatlaydigan IEnumerator ob'ekti namunasini olish uchun umumiy interfeys bilan ta'minlaydi.

IEnumerator - bu hisoblagichlarning asosiy interfeysi va IEnumerable interfeysidan foydalanish sinfning IEnumeratorni bajarishini talab qiladi. Ikkala interfeys ham amalga oshirilishi kerak, agar siz oldindan yordam berishni xohlasangiz. "AbstractEnumerator" mavhum klassi IEnumerator interfeysini amalga oshiradi.

Hisoblagich va IEgumatorning funktsional imkoniyatlari

IEnumerable interfeysi IEnumerator interfeysini qo'llab-quvvatlash bilan bir qatorda 'predach' iborasidan foydalanib stakandagi elementlarga nisbatan takrorlanishni amalga oshirishga imkon beradi. Bu to'plam turi ob'ektlari uchun ishlatiladigan asosiy interfeys. Iteratsiya ustunning ustki elementi bilan boshlanadi va suyakdagi eng qadimgi element bilan tugaydi. Oddiy qilib aytganda, u sanab o'tilishi mumkin bo'lgan ob'ektni anglatadi.

IEnumerator interfeysi bilan birgalikda ular ArrayList elementlarini birinchi elementdan boshlab va oldinga qarab standartlashtirilgan, ketma-ketlikda takrorlashga imkon beradi. Bashoratli ibora to'plamdagi barcha elementlarni takrorlash uchun IEumerator interfeysining usullari va xususiyatlaridan foydalanadi.

Hisoblagich va I. Hisoblagich: taqqoslash jadvali

Sanab o'tilgan oyatlarning qisqacha mazmuni I Hisoblagich

Xulosa qilib aytganda, IEnumerable va IEnumerator - bu alohida to'plamda iterativ kirishni osonlashtiradigan, yig'ish xususiyatiga ega bo'lgan sinfni raqamlash yoki takrorlash uchun ishlatiladigan interfeyslardir. IEnumerable - bu yig'ish tipidagi ob'ektlar uchun mavjud bo'lgan umumiy interfeys va IEnumerable interfeysini qo'llash orqali umumiy sinf IEnumerator interfeysi orqali iteratsiyani ta'minlaydi. Unda IEnumerator interfeysini amalga oshiruvchi hisoblash klassi namunasini qaytaradigan faqat bitta GetEnumerator usuli qo'llaniladi. IEumerator interfeysi kirish vositasi sifatida ishlatilishi kerak va uni asosiy to'plamni o'zgartirish uchun ishlatib bo'lmaydi. U Reset () va MoveNext () ikkita mavhum usulni va to'plamdagi ma'lum bir elementni chaqirish uchun Current xususiyatini taqdim etadi.

Adabiyotlar

  • Tasvir krediti: https://en.wikipedia.org/wiki/Read-copy-update#/media/File:Rcu_api.jpg
  • Tasvir krediti: https://upload.wikimedia.org/wikipedia/commons/1/17/C_Sharp_Code.PNG
  • Grand, Mark va Bred Merrill. Visual asosiy dizayn naqshlari. Nyu-Jersi: Jon Vili va Sons, 2005. Chop etish
  • Golding, Tod. Professional .Net 2.0 Generics. Nyu-Jersi: Jon Vili va Sons, 2005. Chop etish
  • Miller, Rik. C # to'plamlari: batafsil taqdimot. Virjiniya: Pulp Free Press, 2012 yil. Chop etish