Sebelum kita melompat ke perbezaan antara IEnumerable dan IEnumerator, mari kita mulakan terlebih dahulu istilah Pengukur dan Enumerable dan kapan dan mengapa menggunakannya.
Enumerable adalah modul yang digunakan dalam kelas Array yang memberikan anda Enumerator. Kelas itu sendiri tidak setiap kaedah. Malah, ia menggunakan kaedah yang dipanggil 'GetEnumerator' yang memberi anda Enumerator untuk mengambil itemnya.
Enumerator adalah objek yang mengembalikan setiap item dalam koleksi dalam urutan tertentu, betul-betul seperti yang diminta. Pengkompil menjana kod yang menggunakan Enumerator, apabila anda menulis gelung foreach dalam C #.
IEnumerator adalah antara muka yang dilaksanakan oleh pencawang dan kelas enumerable mengimplementasikan antara muka IEnumerable.
IEnumerable adalah antara muka asas yang digunakan untuk mendapatkan objek yang mengetahui cara menghitung (atau meleset) ke atas unsur-unsur dalam koleksi.
Ia adalah satu pelaksanaan pola iterator yang menyediakan mekanisme untuk melintasi objek dalam koleksi tanpa mengira struktur dalamannya. Antaramuka IEnumerable mewakili objek yang boleh dilewatkan dalam koleksi.
Ia hanya menggunakan satu kaedah "GetEnumerator" yang mengembalikan contoh kelas pencacah yang melaksanakan antara muka IEnumerator.
Antaramuka IEnumerator, sebaliknya, mengisytiharkan dua kaedah - Reset () dan MoveNext () - dan satu sifat, Semasa. MoveNext () mengembalikan lembaran Boolean yang menandakan akhir senarai dan membantu meletakkan elemen pertama dalam senarai selepas memanggil kaedah Reset () - ia menetapkan enumerator ke kedudukan lalainya supaya untuk mengulangi semula senarai dari permulaan.
Hartanah semasa hanya boleh dipanggil melalui contoh antara muka IEnumerator dan ia mengembalikan elemen semasa dalam senarai.
Kedua-dua IEnumerable dan IEnumerator adalah antara muka yang melaksanakan corak reka bentuk perisian iterator dalam Rangka Kerja Bersih. . Kerangka Net. Membuat akses elemen individu dalam koleksi tersuai semasa melaksanakan IEnumerable dan IEnumerator interface. Antara muka IEnumerable mengisytiharkan hanya satu kaedah yang dipanggil GetEnumerator yang mengembalikan satu jenis antara muka yang dipanggil antara muka IEnumerator untuk koleksi tertentu itu. Sebaliknya, IEnumerator adalah antara muka asas bagi semua pencari yang bukan generik yang digunakan untuk membaca data dalam koleksi. Bagaimanapun, pencari tidak boleh digunakan untuk mengubah suai koleksi asas.
Antara muka IEnumerable menentukan hanya satu kaedah GetEnumerator () yang merupakan kaedah contoh yang digunakan pada beberapa jenis koleksi yang berbeza. Ia mendapat pemula IEnumerator yang boleh digunakan untuk mengalihkan semua nilai dari koleksi. Apabila anda menulis gelung foreach dalam C # kod itu ia menjana panggilan kaedah GetEnumerator untuk mencipta Enumerator yang digunakan oleh gelung.
IEnumerator, sebaliknya, menggunakan dua kaedah MoveNext () dan Reset () dan sifat Semasa. Kaedah MoveNext () mengambil pencacah ke elemen seterusnya koleksi, sedangkan kaedah Reset () menetapkan enumerator ke kedudukan lalai yang sebelum elemen pertama dalam koleksi.
IEnumerable adalah antara muka generik yang menyediakan abstraksi untuk mengelilingi unsur-unsur dan dengan melaksanakan antara muka IEnumerable, kelas generik yang pada dasarnya membolehkan lelaran melalui antara muka IEnumerator. Dengan berbuat demikian, kelas-kelas ini akhirnya menyediakan antara muka yang biasa untuk mendapatkan contoh objek IEnumerator yang menyokong semua set dasar kaedah navigasi.
IEnumerator adalah antara muka asas untuk enumerator dan penggunaan antara muka IEnumerable memerlukan kelas itu mesti melaksanakan IEnumerator. Kedua-dua antara muka perlu dilaksanakan, jika anda ingin memberikan sokongan untuk pendamping. AbstractEnumerator kelas abstrak melaksanakan antara muka IEnumerator.
Antara muka IEnumerable, bersama-sama dengan sokongan antara muka IEnumerator, membolehkan anda melaraskan elemen dalam timbunan menggunakan pernyataan 'foreach'. Ia adalah antara muka asas yang digunakan untuk objek jenis koleksi. Perulangan bermula dengan unsur teratas dalam timbunan dan berakhir dengan elemen tertua dalam timbunan. Ringkasnya, ia mewakili objek yang boleh disebutkan.
Bersama-sama dengan antara muka IEnumerator, mereka membolehkan unsur-unsur ArrayList dileret dalam fleksibel, berurutan, bermula dengan elemen pertama dan maju. Kenyataan foreach menggunakan kaedah dan sifat antara muka IEnumerator untuk mengulang semua elemen dalam koleksi.
Secara ringkasnya, kedua-dua IEnumerable dan IEnumerator adalah antara muka yang digunakan untuk menghitung atau melancarkan kelas yang mempunyai sifat koleksi yang bermakna mereka memudahkan akses berulang dalam koleksi tersuai. IEnumerable adalah antara muka generik yang tersedia untuk objek jenis koleksi dan dengan melaksanakan antara muka IEnumerable, kelas generik yang pada dasarnya membolehkan lelaran melalui antara muka IEnumerator. Ia menggunakan hanya satu kaedah GetEnumerator yang mengembalikan contoh kelas pencacah yang melaksanakan antara muka IEnumerator. Antara muka IEnumerator bertujuan untuk digunakan sebagai aksesori dan ia tidak boleh digunakan untuk mengubah suai koleksi asas. Ia menyediakan dua kaedah abstrak Reset () dan MoveNext (), dan sifat Semasa untuk memanggil elemen tertentu dalam koleksi.