Como uma matriz permite acesso rápido por índice, e IList
/ IList<T>
is são as únicas interfaces de coleção que suportam isso. Portanto, talvez sua pergunta real seja "Por que não há interface para coleções constantes com indexadores?" E para isso eu não tenho resposta.
Também não há interfaces somente leitura para coleções. E sinto falta daqueles ainda mais do que um tamanho constante com a interface de indexadores.
Na IMO, deve haver várias outras interfaces de coleta (genéricas), dependendo dos recursos de uma coleção. E os nomes deveriam ter sido diferentes também, List
pois algo com um indexador é realmente IMO estúpido.
- Apenas enumeração
IEnumerable<T>
- Somente leitura, mas nenhum indexador (.Count, .Contains, ...)
- Redimensionável, mas sem indexador, ou seja, definido como (Adicionar, Remover, ...)
ICollection<T>
- Somente leitura com indexador (indexador, indexof, ...)
- Tamanho constante com indexador (indexador com setter)
- Tamanho variável com indexador (Insert, ...) atual
IList<T>
Eu acho que as interfaces de coleção atuais são de design ruim. Mas, como eles têm propriedades informando quais métodos são válidos (e isso faz parte do contrato desses métodos), não infringe o princípio da substituição.