Tratemos de pensar fuera de la caja con / por lógica y comprenda claramente estas tres interfaces en su pregunta:
Cuando la clase de alguna instancia implementa la interfaz System.Collection.IEnumerable, entonces, en palabras simples, podemos decir que esta instancia es enumerable e iterable, lo que significa que esta instancia permite de alguna manera en un solo ciclo ir / obtener / pasar / recorrer / iterar sobre / a través de todos los elementos y elementos que contiene esta instancia.
Esto significa que también es posible enumerar todos los elementos y elementos que contiene esta instancia.
Cada clase que implementa la interfaz System.Collection.IEnumerable también implementa el método GetEnumerator que no toma argumentos y devuelve una instancia de System.Collections.IEnumerator.
Las instancias de la interfaz System.Collections.IEnumerator se comportan de manera muy similar a los iteradores de C ++.
Cuando la clase de alguna instancia implementa la interfaz System.Collection.ICollection, en palabras simples, podemos decir que esta instancia es una colección de cosas.
La versión genérica de esta interfaz, es decir, System.Collection.Generic.ICollection, es más informativa porque esta interfaz genérica establece explícitamente cuál es el tipo de elementos de la colección.
Todo esto es razonable, racional, lógico y tiene sentido que la interfaz System.Collections.ICollection herede de System.Collections.IEnumerable interfaz, porque teóricamente cada colección también es enumerable e iterable y esto es teóricamente posible revisar todos los elementos y elementos. en cada colección
La interfaz System.Collections.ICollection representa una colección dinámica finita que se puede cambiar, lo que significa que los elementos existentes se pueden eliminar de la colección y se pueden agregar nuevos elementos a la misma colección.
Esto explica por qué la interfaz System.Collections.ICollection tiene los métodos "Agregar" y "Eliminar".
Debido a que las instancias de la interfaz System.Collections.ICollection son colecciones finitas, la palabra "finito" implica que cada colección de esta interfaz siempre tiene un número finito de elementos y elementos.
La propiedad Cuenta de la interfaz System.Collections.ICollection supone devolver este número.
La interfaz System.Collections.IEnumerable no tiene estos métodos y propiedades que tiene la interfaz System.Collections.ICollection, porque no tiene ningún sentido que System.Collections.IEnumerable tenga estos métodos y propiedades que la interfaz System.Collections.ICollection tiene.
La lógica también dice que cada instancia que es enumerable e iterable no es necesariamente una colección y no necesariamente modificable.
Cuando digo cambiable, quiero decir que no piense de inmediato que puede agregar o eliminar algo de algo que es enumerable e iterable.
Si acabo de crear una secuencia finita de números primos, por ejemplo, esta secuencia finita de números primos es de hecho una instancia de System.Collections.IEnumerable interface, porque ahora puedo repasar todos los números primos en esta secuencia finita en un solo bucle y hacer lo que quiera hacer con cada uno de ellos, como imprimir cada uno de ellos en la ventana o pantalla de la consola, pero esta secuencia finita de números primos no es una instancia de la interfaz System.Collections.ICollection, porque esto no tiene sentido para agregue números compuestos a esta secuencia finita de números primos.
También desea en la próxima iteración obtener el siguiente número primo más cercano al número primo actual en la iteración actual, si es así, tampoco desea eliminar los números primos existentes de esta secuencia finita de números primos.
También es probable que desee usar, codificar y escribir "rendimiento de rendimiento" en el método GetEnumerator de la interfaz System.Collections.IEnumerable para producir los números primos y no asignar nada en el montón de memoria y luego asignar el recolector de basura (GC) a ambos desasignar y liberar esta memoria del montón, porque esto es obviamente un desperdicio de memoria del sistema operativo y disminuye el rendimiento.
La asignación de memoria dinámica y la desasignación en el montón se deben realizar al invocar los métodos y propiedades de la interfaz System.Collections.ICollection, pero no al invocar los métodos y propiedades de System.Collections.IEnumerable interfaz (aunque System.Collections.IEnumerable interface solo tiene 1 método y 0 propiedades).
Según lo que otros dijeron en esta página web de desbordamiento de pila, la interfaz System.Collections.IList simplemente representa una colección ordenable y esto explica por qué los métodos de la interfaz System.Collections.IList funcionan con índices en contraste con los de la interfaz System.Collections.ICollection.
En resumen, la interfaz System.Collections.ICollection no implica que una instancia de la misma sea ordenable, pero la interfaz System.Collections.IList sí lo implica.
El conjunto teóricamente ordenado es un caso especial de conjunto no ordenado.
Esto también tiene sentido y explica por qué la interfaz System.Collections.IList hereda la interfaz System.Collections.ICollection.
List
debería ser mucho mejor, ¿sí?