Sebelum kita beralih ke perbedaan antara IEnumerable dan IEnumerator, mari kita pahami dulu istilah Enumerator dan Enumerable serta kapan dan mengapa menggunakannya..
Enumerable adalah modul yang digunakan dalam kelas Array yang memberi Anda Enumerator. Kelas itu sendiri tidak masing-masing metode. Bahkan, ia menggunakan metode yang disebut 'GetEnumerator' yang memberi Anda Enumerator untuk mengambil itemnya.
Enumerator adalah objek yang mengembalikan setiap item dalam koleksi dalam urutan tertentu, persis seperti yang diminta. Compiler menghasilkan kode yang menggunakan Enumerator, ketika Anda menulis loop foreach di C #.
IEnumerator adalah antarmuka yang diimplementasikan oleh enumerator dan kelas enumerable mengimplementasikan antarmuka IEnumerable.
IEnumerable adalah antarmuka dasar yang digunakan untuk mendapatkan objek yang tahu cara menghitung (atau mengulangi) elemen-elemen dalam koleksi.
Ini merupakan implementasi dari pola iterator yang menyediakan mekanisme untuk melintasi objek dalam koleksi terlepas dari struktur internalnya. Antarmuka IEnumerable mewakili objek yang dapat diulang dalam koleksi.
Hanya menggunakan satu metode "GetEnumerator" yang mengembalikan instance kelas enumerator yang mengimplementasikan antarmuka IEnumerator.
Antarmuka IEnumerator, di satu sisi, menyatakan dua metode - Reset () dan MoveNext () - dan satu properti, Current. MoveNext () mengembalikan lembah Boolean yang menunjukkan akhir daftar dan membantu memposisikan elemen pertama dalam daftar setelah memanggil metode Reset () - mengatur enumerator ke posisi default sehingga untuk mengulangi kembali daftar dari awal.
Properti saat ini hanya dapat dipanggil melalui instance antarmuka IEnumerator dan mengembalikan elemen saat ini dalam daftar.
Baik IEnumerable dan IEnumerator adalah antarmuka yang mengimplementasikan pola desain perangkat lunak iterator dalam .Net Framework bersama-sama. Kerangka Bersih. Membuat mengakses elemen individu dalam koleksi kustom sambil menerapkan antarmuka IEnumerable dan IEnumerator. Antarmuka IEnumerable hanya mendeklarasikan satu metode yang disebut GetEnumerator yang mengembalikan jenis antarmuka lain yang disebut antarmuka IEnumerator untuk koleksi tertentu. IEnumerator, di sisi lain, adalah antarmuka dasar untuk semua enumerator non-generik yang digunakan untuk membaca data dalam koleksi. Namun, enumerator tidak dapat digunakan untuk memodifikasi koleksi yang mendasarinya.
Antarmuka IEnumerable hanya menetapkan satu metode GetEnumerator () yang merupakan metode instan yang digunakan pada beberapa jenis koleksi yang berbeda. Ia mendapat iterator IEnumerator yang dapat digunakan untuk beralih semua nilai dari koleksi. Ketika Anda menulis foreach loop dalam C # kode yang dihasilkannya memanggil metode GetEnumerator untuk membuat Enumerator yang digunakan oleh loop.
IEnumerator, di sisi lain, menggunakan dua metode MoveNext () dan Reset () dan properti saat ini. Metode MoveNext () membawa enumerator ke elemen koleksi berikutnya, sedangkan metode Reset () mengatur enumerator ke posisi defaultnya yaitu sebelum elemen pertama dalam koleksi.
IEnumerable adalah antarmuka generik yang menyediakan abstraksi untuk pengulangan elemen dan dengan mengimplementasikan antarmuka IEnumerable, kelas generik pada dasarnya memungkinkan iterasi melalui antarmuka IEnumerator. Dengan demikian, kelas-kelas ini pada akhirnya menyediakan antarmuka umum untuk mengambil sebuah instance dari objek IEnumerator yang mendukung semua set dasar metode navigasi.
IEnumerator adalah antarmuka dasar untuk enumerator dan penggunaan antarmuka IEnumerable mengharuskan kelas harus mengimplementasikan IEnumerator. Kedua antarmuka perlu diimplementasikan, jika Anda ingin memberikan dukungan untuk foreach. Kelas abstrak 'AbstractEnumerator' mengimplementasikan antarmuka IEnumerator.
Antarmuka IEnumerable, bersama dengan dukungan antarmuka IEnumerator, memungkinkan Anda untuk beralih ke elemen-elemen dalam tumpukan menggunakan pernyataan 'foreach'. Ini adalah antarmuka dasar yang digunakan untuk objek tipe koleksi. Iterasi dimulai dengan elemen teratas di stack dan berakhir dengan elemen tertua di stack. Sederhananya, itu merupakan objek yang dapat disebutkan.
Bersama-sama dengan antarmuka IEnumerator, mereka memungkinkan elemen ArrayList diulang secara standar, secara berurutan, dimulai dengan elemen pertama dan bergerak maju. Pernyataan foreach menggunakan metode dan properti antarmuka IEnumerator untuk beralih semua elemen dalam koleksi.
Singkatnya, baik IEnumerable dan IEnumerator adalah antarmuka yang digunakan untuk menghitung atau mengulang kelas yang memiliki sifat koleksi yang berarti mereka memfasilitasi akses berulang dalam koleksi kustom. IEnumerable adalah antarmuka generik yang tersedia untuk objek tipe koleksi dan dengan mengimplementasikan antarmuka IEnumerable, kelas generik pada dasarnya memungkinkan iterasi melalui antarmuka IEnumerator. Hanya menggunakan satu metode GetEnumerator yang mengembalikan instance kelas enumerator yang mengimplementasikan antarmuka IEnumerator. Antarmuka IEnumerator dimaksudkan untuk digunakan sebagai accessors dan tidak dapat digunakan untuk memodifikasi koleksi yang mendasarinya. Ini menyediakan dua metode abstrak Reset () dan MoveNext (), dan properti saat ini untuk memanggil elemen tertentu dalam koleksi.