Warum implementiert die generische ICollection IReadOnlyCollection in .NET 4.5 nicht?
In .NET 4.5 / C # 5IReadOnlyCollection<T>
wird mit einem deklariertCount
Eigentum:
public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
int Count { get; }
}
Ich frage mich, hätte das keinen Sinn ergeben?ICollection<T>
um das umzusetzenIReadOnlyCollection<T>
Schnittstelle auch:
public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*
Dies hätte bedeutet, dass Klassen implementierenICollection<T>
hätte automatisch implementiertIReadOnlyCollection<T>
. Das klingt für mich vernünftig.
DasICollection<T>
Abstraktion kann als Erweiterung desIReadOnlyCollection<T>
Abstraktion. Beachten Sie, dassList<T>
implementiert zum Beispiel beideICollection<T>
undIReadOnlyCollection<T>
.
Es wurde jedoch nicht so konzipiert.
Was vermisse ich hier? Warum wurde stattdessen die aktuelle Implementierung gewählt?
AKTUALISIEREN
Ich suche nach einer Antwort, die verwendetObjektorientiertes Design um zu erklären warum:
Eine konkrete Klasse wieList<T>
beide implementierenIReadOnlyCollection<T>
und ICollection<T>
ist ein besseres Design als:
ICollection<T>
implementierenIReadOnlyCollection<T>
direktBitte beachten Sie auch, dass dies im Wesentlichen die gleiche Frage ist wie:
Warum nicht?IList<T>
implementierenIReadOnlyList<T>
?Warum nicht?IDictionary<T>
implementierenIReadOnlyDictionary<T>
?