Dans .NET 4.5 / C# 5, IReadOnlyCollection<T>
est déclarée avec un Count
de la propriété:
public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
int Count { get; }
}
Je me demande, ne serait-il pas logique pour l' ICollection<T>
pour mettre en œuvre l' IReadOnlyCollection<T>
interface:
public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*
Cela aurait signifié que les classes qui implémentent ICollection<T>
avons mis en place automatiquement IReadOnlyCollection<T>
. Cela semble raisonnable pour moi.
L' ICollection<T>
d'abstraction peut être considéré comme une extension de l' IReadOnlyCollection<T>
d'abstraction. Notez que List<T>
, par exemple, met en œuvre les deux ICollection<T>
et IReadOnlyCollection<T>
.
Cependant, il n'a pas été conçu de cette façon.
Ce qui me manque ici? Pourquoi l'actuelle mise en œuvre ont été choisis à la place?
Mise à JOUR
Je suis à la recherche d'une réponse qui utilise la conception Orientée Objet raisonnement pour expliquer pourquoi:
- Une classe concrète comme l'
List<T>
mise en œuvre à la foisIReadOnlyCollection<T>
etICollection<T>
une meilleure conception que:
-
ICollection<T>
œuvreIReadOnlyCollection<T>
directement
Veuillez également noter que c'est essentiellement la même question:
- Pourquoi ne peut -
IList<T>
œuvreIReadOnlyList<T>
? - Pourquoi ne peut -
IDictionary<T>
œuvreIReadOnlyDictionary<T>
?