为什么ICollection <T>没有实现ICollection?

这个问题在这里已经有了答案:

  • 为什么IEnumerable <T>从IEnumerable继承? 4个答案

  • 正如Nick所说, ICollection几乎没用。

    这些接口只有它们的名称相似, CopyToCount是唯一共同的属性。 AddRemoveClearContainsIsReadOnly已添加,而IsSychronizedSyncRoot已被删除。

    实质上, 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

    上一篇: Why doesn't ICollection<T> implement ICollection?

    下一篇: Why doesn't ConcurrentBag<T> implement ICollection<T>?