Я подозреваю, что существование частично реализованных интерфейсов является следствием решения проекта не разрешать классу или интерфейсу иметь независимые свойства для чтения и записи для одного и того же имени и автоматически использовать их соответствующим образом (например, если класс имеет свойство для чтения 'foo' и свойство для записи 'foo', используйте свойство для чтения для чтения и для записи для записи). Это дизайнерское решение затруднило разделение аспектов чтения и записи определенных интерфейсов.
В идеале, вместо единого интерфейса IList, были бы универсальный контравариантный интерфейс IReadableByIndex, универсальные ковариантные интерфейсы IWriteableByIndex, IAppendable, IGrowableByIndex (включает в себя различные функции вставки и удаления) и неуниверсальный IMovableByIndex (копия на основе индекса, функции swap и roll) и, возможно, IComparableByIndex (с учетом двух индексов сравните элементы). Интерфейс IList мог бы реализовать все это, но также было бы много полезных подмножеств (многие из которых могли бы быть контравариантными или ковариантными). Обратите внимание, что существование некоторых неуниверсальных подпрограмм позволило бы реализовать такие вещи, как сортировки, в любой коллекции, которая реализует IComparableByIndex и IMovableByIndex, не беспокоясь о точном типе коллекции.
К сожалению, для того чтобы разделение IList было действительно полезным, было бы необходимо иметь IReadableByIndex и IWritableByIndex в качестве отдельных интерфейсов. Это, в свою очередь, создало бы трудности при попытке написать код, который бы наследовал оба интерфейса, поскольку компилятор будет жаловаться на неоднозначность при попытке использовать индексированный метод доступа. Так как IReadableByIndex и IWritableByIndex в конечном итоге пришлось объединить, Microsoft, вероятно, полагала, что это может также объединить все в IList.