Когда IReadOnlyList<T> был введен в .NET 4.5, я на мгновение подумал, что недостающая часть головоломки была наконец вставлена на место: способ передать истинный индексируемый интерфейс, только когда я должен был использовать свое собственное чтение -одно интерфейсы и создавать классы-оболочки вокруг всего.
Я ожидал, что интерфейс будет помещен в "естественную" иерархию, которая в идеале была бы следующей:
IEnumerable<T>
.GetEnumerator()
-> IReadOnlyCollection<T> : IEnumerable<T>
.Count
-> IReadOnlyList<T> : IReadOnlyCollection<T>
.Item[...]
-> IList<T> : IReadOnlyList<T>
.Add(...)
.Clear()
.Contains(...)
(etc)
Но, как оказалось, IList<T> не наследует от IReadOnlyList<T>.
Есть ли причина для этого?