Dlaczego ogólne ICollection nie implementuje IReadOnlyCollection w .NET 4.5?

W .NET 4.5 / C # 5,IReadOnlyCollection<T> jest zadeklarowany za pomocą aCount własność:

public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
    int Count { get; }
}

Zastanawiam się, czy nie miałoby to sensuICollection<T> wdrożyćIReadOnlyCollection<T> interfejs:

public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*

Oznaczałoby to, że klasy implementująICollection<T> zaimplementowałoby się automatycznieIReadOnlyCollection<T>. To brzmi dla mnie rozsądnie.

TheICollection<T> abstrakcja może być postrzegana jako przedłużenieIReadOnlyCollection<T> abstrakcja. Zauważ, żeList<T>na przykład implementuje obaICollection<T> iIReadOnlyCollection<T>.

Jednak nie został zaprojektowany w ten sposób.

Czego mi tu brakuje? Dlaczego zamiast tego wybrano by bieżącą implementację?

AKTUALIZACJA

Szukam odpowiedzi, która używaRozumowanie projektowe zorientowane obiektowo wyjaśnić, dlaczego:

Konkretna klasa, taka jakList<T> wdrożenie obuIReadOnlyCollection<T> i ICollection<T>

to lepszy projekt niż:

ICollection<T> realizowanieIReadOnlyCollection<T> bezpośrednio

Należy również pamiętać, że jest to zasadniczo to samo pytanie, co:

Dlaczego nieIList<T> wprowadzić w życieIReadOnlyList<T>?Dlaczego nieIDictionary<T> wprowadzić w życieIReadOnlyDictionary<T>?

questionAnswers(6)

yourAnswerToTheQuestion