为什么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