在.NET 4.5/C#5中,IReadOnlyCollection<T>使用Count属性声明:
public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
int Count { get; }
}
Run Code Online (Sandbox Code Playgroud)
我想知道,ICollection<T>实现IReadOnlyCollection<T>接口也没有意义:
public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*
Run Code Online (Sandbox Code Playgroud)
这意味着实现的类ICollection<T>将自动实现IReadOnlyCollection<T>.这对我来说听起来很合理.
的ICollection<T>抽象可以被看作是所述的扩展IReadOnlyCollection<T>抽象.请注意List<T>,例如,实现两者ICollection<T>和IReadOnlyCollection<T>.
然而,它并没有这样设计.
我在这里错过了什么?为什么要选择当前的实现呢?
UPDATE
我正在寻找一个使用面向对象设计推理来解释原因的答案:
List<T>实现IReadOnlyCollection<T> 和 ICollection<T>是一个比以下更好的设计:
ICollection<T>IReadOnlyCollection<T>直接实施另请注意,这基本上与以下问题相同:
IList<T>实施IReadOnlyList<T>?IDictionary<T>实施IReadOnlyDictionary<T>?