Когда 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>
.
Есть ли причина для этого?