在 .NET 4.5 / C# 5 中,IReadOnlyCollection<T>
使用Count
属性声明:
public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
{
int Count { get; }
}
我想知道,ICollection<T>
实现IReadOnlyCollection<T>
接口是否也有意义:
public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>*
这意味着实现的类ICollection<T>
会自动实现IReadOnlyCollection<T>
。这对我来说听起来很合理。
ICollection<T>
抽象可以看作是抽象的扩展IReadOnlyCollection<T>
。请注意List<T>
,例如,同时实现ICollection<T>
和IReadOnlyCollection<T>
。
然而,它并不是这样设计的。
我在这里想念什么?为什么会选择当前的实现呢?
更新
我正在寻找一个使用面向对象设计推理来解释原因的答案:
- 一个具体的类,例如同时
List<T>
实现IReadOnlyCollection<T>
和ICollection<T>
是比以下更好的设计:
ICollection<T>
IReadOnlyCollection<T>
直接执行
另请注意,这基本上与以下问题相同:
- 为什么不
IList<T>
执行IReadOnlyList<T>
? - 为什么不
IDictionary<T>
执行IReadOnlyDictionary<T>
?