Поскольку массив обеспечивает быстрый доступ по индексу, и IList
/ IList<T>
- единственные интерфейсы коллекции, которые это поддерживают. Так что, возможно, ваш настоящий вопрос: «Почему нет интерфейса для постоянных коллекций с индексаторами?» И на это у меня нет ответа.
Для коллекций также нет интерфейсов только для чтения. И мне их не хватает даже больше, чем постоянный размер с интерфейсом индексаторов.
IMO должно быть еще несколько (общих) интерфейсов коллекции в зависимости от функций коллекции. И названия тоже должны были быть другие, List
ибо что-то с индексатором действительно тупо ИМО.
- Просто перечисление
IEnumerable<T>
- Только для чтения, но без индексатора (.Count, .Contains, ...)
- Изменяемый размер, но без индексатора, т.е. устанавливается как (Добавить, Удалить, ...) текущий
ICollection<T>
- Только для чтения с индексатором (indexer, indexof, ...)
- Постоянный размер с индексатором (индексатор с сеттером)
- Переменный размер с индексатором (Insert, ...) текущий
IList<T>
Я считаю, что нынешние интерфейсы коллекций - плохой дизайн. Но поскольку у них есть свойства, говорящие вам, какие методы допустимы (и это часть контракта этих методов), это не нарушает принцип подстановки.