相关疑难解决方法(0)

为什么通用ICollection不在.NET 4.5中实现IReadOnlyCollection?

在.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>直接实施

另请注意,这基本上与以下问题相同:

  1. 为什么不IList<T>实施IReadOnlyList<T>
  2. 为什么不IDictionary<T>实施IReadOnlyDictionary<T>

c# oop design-patterns c#-5.0 .net-4.5

52
推荐指数
2
解决办法
8021
查看次数

标签 统计

.net-4.5 ×1

c# ×1

c#-5.0 ×1

design-patterns ×1

oop ×1