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średnioNależ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>
?