为什么ICollection <T>没有实现ICollection?
这个问题在这里已经有了答案:
正如Nick所说, ICollection几乎没用。
这些接口只有它们的名称相似, CopyTo和Count是唯一共同的属性。 Add , Remove , Clear , Contains和IsReadOnly已添加,而IsSychronized和SyncRoot已被删除。
实质上, ICollection<T>是可变的, ICollection不是。
Krzysztof Cwalina有更多关于这个话题
ICollection<T>看起来像ICollection ,但它实际上是一个非常不同的抽象。 我们发现ICollection不是很有用。 同时,我们没有表示读/写非索引集合的抽象。 ICollection<T>就是这样的抽象,你可以说ICollection在泛型世界中没有精确的对应对象; IEnumerable<T>是最接近的。
ICollection<T>和ICollection实际上是非常不同的接口,不幸的是它们共享一个名称而没有其他的东西。
来自http://blogs.msdn.com/b/kcwalina/archive/2005/09/23/collections.aspx
ICollection<T>看起来像ICollection ,但它实际上是一个非常不同的抽象。 我们发现ICollection不是很有用。 同时,我们没有表示读/写非索引集合的抽象。 ICollection<T>就是这样的抽象,你可以说ICollection在泛型世界中没有精确的对应对象; IEnumerable<T>是最接近的。
首先, IList<T> 也不实施IList ,可能出于同样的原因。 IList<T>实现: ICollection<T>, IEnumerable<T>, IEnumerable
ICollection的某些部分并不是必需的,但在界面出来后改变界面最多也就是打破了。
看看ICollection:
public interface ICollection : IEnumerable
{
void CopyTo(Array array, int index);
int Count { get; }
bool IsSynchronized { get; }
object SyncRoot { get; }
}
在大多数情况下,这只是您不需要的属性,当我想要一个我从未需要过的集合时,也不想实现它。 它变老会是我想的推理,但你必须向.Net团队询问肯定的答案。
链接地址: http://www.djcxy.com/p/64331.html