Por que o ICollection genérico não implementa o IReadOnlyCollection no .NET 4.5?
No .NET 4.5 / C # 5,IReadOnlyCollection<T>
é declarado com umCount
propriedade:
public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
int Count { get; }
}
Eu estou querendo saber, não teria feito sentido paraICollection<T>
para implementar oIReadOnlyCollection<T>
interface também:
public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*
Isso significaria que as classes implementandoICollection<T>
Teria implementado automaticamenteIReadOnlyCollection<T>
. Isso parece razoável para mim.
oICollection<T>
abstração pode ser vista como uma extensão doIReadOnlyCollection<T>
abstração. Observe queList<T>
, por exemplo, implementa tantoICollection<T>
eIReadOnlyCollection<T>
.
No entanto, não foi concebido dessa forma.
O que estou perdendo aqui? Por que a implementação atual foi escolhida?
ATUALIZAR
Eu estou procurando uma resposta que usaRaciocínio de design orientado a objetos para explicar por que:
Uma classe concreta comoList<T>
implementando ambosIReadOnlyCollection<T>
e ICollection<T>
é um design melhor que:
ICollection<T>
implementandoIReadOnlyCollection<T>
diretamenteObserve também que esta é essencialmente a mesma pergunta que:
Por que nãoIList<T>
implementoIReadOnlyList<T>
?Por que nãoIDictionary<T>
implementoIReadOnlyDictionary<T>
?