Mari kita coba berpikir di luar kotak dengan / oleh logika dan mengerti dengan jelas ketiga antarmuka dalam pertanyaan Anda:
Ketika kelas dari beberapa instance mengimplementasikan antarmuka System.Collection.IEnumerable maka, dengan kata-kata sederhana, kita dapat mengatakan bahwa instance ini keduanya enumerable dan iterable, yang berarti bahwa instance ini memungkinkan entah bagaimana dalam satu loop tunggal untuk pergi / mendapatkan / lulus / melintasi / beralih atas / melalui semua item dan elemen yang berisi instance ini.
Ini berarti bahwa ini juga memungkinkan untuk menyebutkan semua item dan elemen yang terdapat dalam instance ini.
Setiap kelas yang mengimplementasikan antarmuka System.Collection.IEnumerable juga mengimplementasikan metode GetEnumerator yang tidak menggunakan argumen dan mengembalikan instance System.Collections.IEnumerator.
Contoh antarmuka System.Collections.IEnumerator berperilaku sangat mirip dengan iterator C ++.
Ketika kelas beberapa instance mengimplementasikan antarmuka System.Collection.ICollection maka, dengan kata-kata sederhana, kita dapat mengatakan bahwa instance ini adalah beberapa kumpulan hal.
Versi generik dari antarmuka ini, yaitu System.Collection.Generic.ICollection, lebih informatif karena antarmuka generik ini secara eksplisit menyatakan apa jenis barang dalam koleksi.
Ini semua masuk akal, rasional, logis dan masuk akal bahwa System.Collections.ICollection interface mewarisi dari System.Collections.Intermuka yang dapat dihitung, karena secara teoritis setiap koleksi juga dapat dihitung dan diulang dan secara teori ini mungkin untuk membahas semua item dan elemen di setiap koleksi.
Antarmuka System.Collections.ICollection mewakili koleksi dinamis terbatas yang dapat diubah, yang berarti bahwa item yang ada dapat dihapus dari koleksi dan item baru dapat ditambahkan ke koleksi yang sama.
Ini menjelaskan mengapa antarmuka System.Collections.ICollection memiliki metode "Tambah" dan "Hapus".
Karena instance antarmuka System.Collections.ICollection adalah koleksi hingga maka kata "hingga" menyiratkan bahwa setiap koleksi antarmuka ini selalu memiliki jumlah item dan elemen yang terbatas di dalamnya.
Properti Count dari System.Collections.ICollection antarmuka mengandaikan untuk mengembalikan nomor ini.
Antarmuka System.Collections.IEnumerable tidak memiliki metode dan properti yang dimiliki antarmuka System.Collections.ICollection, karena tidak masuk akal bahwa System.Collections.IEnumerable akan memiliki metode dan properti yang memiliki antarmuka System.Collections.ICollection.
Logikanya juga mengatakan bahwa setiap instance yang enumerable dan iterable tidak harus berupa koleksi dan tidak harus berubah.
Ketika saya mengatakan dapat diubah, maksud saya jangan langsung berpikir bahwa Anda dapat menambah atau menghapus sesuatu dari sesuatu yang dapat dihitung dan diulang.
Jika saya baru saja membuat beberapa urutan bilangan prima yang terbatas, misalnya, urutan bilangan prima yang terbatas ini memang merupakan turunan dari antarmuka System.Collections.IEnumerable, karena sekarang saya dapat membahas semua bilangan prima dalam urutan terbatas ini dalam satu putaran tunggal. dan melakukan apa pun yang ingin saya lakukan dengan masing-masing, seperti mencetak masing-masing ke jendela atau layar konsol, tetapi urutan nomor prima yang terbatas ini bukan turunan dari antarmuka System.Collections.ICollection, karena ini tidak masuk akal untuk tambahkan bilangan komposit ke urutan terbatas bilangan prima ini.
Anda juga ingin dalam iterasi berikutnya untuk mendapatkan bilangan prima terdekat yang lebih besar berikutnya ke bilangan prima saat ini dalam iterasi saat ini, jika demikian Anda juga tidak ingin menghapus bilangan prima yang ada dari urutan bilangan prima yang terbatas ini.
Anda juga mungkin ingin menggunakan, kode, dan tulis "hasil pengembalian" dalam metode GetEnumerator dari System.Collections. Antarmuka yang dapat dihitung untuk menghasilkan bilangan prima dan tidak mengalokasikan apa pun pada tumpukan memori dan kemudian menugaskan Garbage Collector (GC) untuk keduanya deallocate dan bebaskan memori ini dari heap, karena ini jelas membuang-buang memori sistem operasi dan menurunkan kinerja.
Alokasi dan alokasi memori dinamis pada heap harus dilakukan ketika memanggil metode dan properti System.Collections.Collection interface, tetapi tidak ketika memanggil metode dan properti System.Collections.Ini antarmuka yang dapat dihitung (meskipun System.Collections.Ini antarmuka yang dapat dihitung hanya memiliki 1 metode dan 0 properti).
Menurut apa yang dikatakan orang lain di halaman web Stack Overflow ini, antarmuka System.Collections.IList hanya mewakili yang dapat dipesan koleksi yang dapat dan ini menjelaskan mengapa metode System.Collections.Listasis antarmuka bekerja dengan indeks yang berbeda dengan antarmuka System.Collections.ICollection.
Singkatnya antarmuka System.Collections.ICollection tidak menyiratkan bahwa instance itu dapat dipesan, tetapi antarmuka System.Collections.IList tidak menyiratkan itu.
Set yang dipesan secara teoritis adalah case khusus dari unordered set.
Ini juga masuk akal dan menjelaskan mengapa antarmuka System.Collections.IList mewarisi antarmuka System.Collections.ICollection.
List
harusnya jauh lebih baik, ya?