Почему универсальная ICollection не реализует IReadOnlyCollection в .NET 4.5?
В .NET 4.5 / C # 5,IReadOnlyCollection<T>
объявлен сCount
имущество:
public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
int Count { get; }
}
Мне интересно, неужели это не имело бы смысла дляICollection<T>
реализоватьIReadOnlyCollection<T>
интерфейс также:
public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*
Это означало бы, что классы, реализующиеICollection<T>
будет автоматически реализованIReadOnlyCollection<T>
, Это звучит разумно для меня.
ICollection<T>
абстракция может рассматриваться как продолжениеIReadOnlyCollection<T>
абстракция. Обратите внимание, чтоList<T>
например, реализует обаICollection<T>
а такжеIReadOnlyCollection<T>
.
Однако это не было разработано таким образом.
Что мне здесь не хватает? Почему вместо этого была выбрана текущая реализация?
UPDATE
Я ищу ответ, который используетObject Oriented design reasoning объяснить почему:
A concrete class such asList<T>
implementing both IReadOnlyCollection<T>
and ICollection<T>
is a better design than:
ICollection<T>
implementing IReadOnlyCollection<T>
directly
Также обратите внимание, что это по сути тот же вопрос, что и:
Why doesn'tIList<T>
implement IReadOnlyList<T>
?
Why doesn't IDictionary<T>
implement IReadOnlyDictionary<T>
?