在 .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>?