Давайте спробуємо мислити поза коробкою за допомогою логіки та чітко зрозуміти ці три інтерфейси у вашому запитанні:
Коли клас якогось екземпляра реалізує System.Collection.IEnumerable інтерфейс, то простими словами, ми можемо сказати, що цей екземпляр є і численним, і ітерабельним, а це означає, що цей екземпляр дозволяє якось в одному циклі перейти / отримати / пройти / перейти / повторити через / через усі елементи та елементи, які містить цей екземпляр.
Це означає, що також можливо перерахувати всі елементи та елементи, які містить цей екземпляр.
Кожен клас, який реалізує System.Collection.IEnumerable інтерфейс, також реалізує метод GetEnumerator, який не приймає аргументів і повертає екземпляр System.Collections.IEnumerator.
Примірники інтерфейсу System.Collections.IEnumerator ведуть себе дуже схоже на ітератори C ++.
Коли клас якогось екземпляра реалізує інтерфейс System.Collection.ICollection, простими словами, ми можемо сказати, що цей екземпляр є деякою сукупністю речей.
Універсальна версія цього інтерфейсу, тобто System.Collection.Generic.ICollection, є більш інформативною, оскільки цей загальний інтерфейс прямо вказує, який тип речей у колекції.
Це все розумно, раціонально, логічно і має сенс, що інтерфейс System.Collections.ICollection успадковується від System.Collections.Ізчисленний інтерфейс, тому що теоретично кожна колекція є і численною, і ітерабельною. у кожній колекції.
Інтерфейс System.Collections.ICollection являє собою скінченну динамічну колекцію, яка може змінюватися, а це означає, що існуючі елементи можуть бути вилучені з колекції, а нові елементи можуть бути додані до тієї ж колекції.
Це пояснює, чому інтерфейс System.Collections.ICollection має методи "Додати" та "Видалити".
Оскільки ці екземпляри інтерфейсу System.Collections.ICollection є скінченними колекціями, то слово "скінченне" означає, що кожна колекція цього інтерфейсу завжди має в ньому обмежену кількість елементів та елементів.
Властивість Count System.Collections.ICollection інтерфейс передбачає повернути це число.
System.Collections.IE численний інтерфейс не має цих методів та властивостей, якими володіє інтерфейс System.Collections.ICollection, оскільки це не має сенсу, що System.Collections.IEnumerable буде мати ці методи та властивості, якими володіє інтерфейс System.Collections.ICollection.
Логіка також говорить, що кожен екземпляр, який є і численним, і ітерабельним, не обов'язково є колекцією і не обов'язково мінливим.
Коли я кажу, що є змінним, я маю на увазі, що не відразу думайте, що ви можете додати або видалити щось із того, що є численним і ітерабельним.
Якщо я щойно створив якусь кінцеву послідовність простих чисел, наприклад, ця кінцева послідовність простих чисел дійсно є екземпляром System.Collections.IEbroble interface, тому що тепер я можу перейти всі прості числа в цій кінцевій послідовності в один цикл і робити все, що я хочу зробити з кожним із них, як-от друкувати кожне з них у вікно або екран консолі, але ця кінцева послідовність простих чисел не є примірником інтерфейсу System.Collections.ICollection, оскільки це не має сенсу додати складені числа до цієї кінцевої послідовності простих чисел.
Також ви хочете, щоб у наступній ітерації отримати наступний найближчий більший простий номер до поточного простого числа в поточній ітерації, якщо так, ви також не хочете видаляти існуючі прості числа з цієї кінцевої послідовності простих чисел.
Крім того, ви, мабуть, хочете використовувати, кодувати та записувати "віддачу прибутковості" у методі GetEnumerator методу System.Collections.IEnumerable для отримання простих чисел і не виділяючи нічого на купі пам'яті, а потім задати збирач сміття (GC) обом. розімкніть та звільніть цю пам’ять з купи, оскільки це, очевидно, і витрата оперативної пам'яті операційної системи, і зниження продуктивності.
Динамічне розподіл пам’яті та розподіл пам’яті на купі повинно здійснюватися під час виклику методів та властивостей інтерфейсу System.Collections.ICollection, але не при виклику методів та властивостей System.Collections.IE незліченного інтерфейсу (хоча System.Collections.IE незліченний інтерфейс має лише 1 метод та 0 властивостей).
Відповідно до сказаного на цій веб-сторінці Stack Overflow, інтерфейс System.Collections.IList просто представляє колекцію, яку можна замовити, і це пояснює, чому методи інтерфейсу System.Collections.IList працюють з індексами на відміну від інтерфейсу System.Collections.ICollection.
Коротше кажучи, інтерфейс System.Collections.ICollection не означає, що його примірник є упорядкованим, але інтерфейс System.Collections.IList це означає.
Теоретично впорядкований набір - це окремий випадок не упорядкованого набору.
Це також має сенс і пояснює, чому інтерфейс System.Collections.IList успадковує інтерфейс System.Collections.ICollection.
List
повинно бути набагато краще, так?