Debido a que una matriz permite un acceso rápido por índice, y IList
/ IList<T>
son las únicas interfaces de colección que lo admiten. Entonces, tal vez su verdadera pregunta es "¿Por qué no hay una interfaz para colecciones constantes con indexadores?" Y a eso no tengo respuesta.
Tampoco hay interfaces de solo lectura para colecciones. Y me faltan esos más que una interfaz de tamaño constante con indexadores.
En mi opinión, debería haber varias interfaces de colección más (genéricas) dependiendo de las características de una colección. Y los nombres también deberían haber sido diferentes, List
porque algo con un indexador es realmente estúpido en mi opinión.
- Solo enumeración
IEnumerable<T>
- Solo lectura pero sin indexador (.Count, .Contains, ...)
- Redimensionable pero sin indexador, es decir, configurado como (Agregar, Eliminar, ...) actual
ICollection<T>
- Solo lectura con indexador (indexador, indexof, ...)
- Tamaño constante con indexador (indexador con un setter)
- Tamaño variable con indexador (Insertar, ...) actual
IList<T>
Creo que las interfaces de colección actuales son de mal diseño. Pero dado que tienen propiedades que le indican qué métodos son válidos (y esto es parte del contrato de estos métodos), no se rompe el principio de sustitución.