首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ICollection<T>不实现ICollection?

为什么ICollection<T>不实现ICollection?
EN

Stack Overflow用户
提问于 2010-03-01 09:05:16
回答 4查看 6.4K关注 0票数 30

IEnumerable<T>实现了IEnumerable

但是ICollection<T>没有实现ICollection

这样做的理由是什么?或者这只是一个疏忽?

EN

回答 4

Stack Overflow用户

发布于 2010-03-01 10:10:10

正如尼克所说,ICollection几乎毫无用处。

这些接口只是在名称上相似,CopyToCount是唯一的共同属性。添加了AddRemoveClearContainsIsReadOnly,删除了IsSychronizedSyncRoot

本质上,ICollection<T>是可变的,而ICollection不是。

有关此topic的详细信息,请参阅Krzysztof Cwalina

ICollection<T>看起来很像ICollection,但它实际上是一个非常不同的抽象。我们发现ICollection并不是很有用。同时,我们没有表示读/写非索引集合的抽象。ICollection<T>就是这样的抽象,您可以说ICollection在泛型世界中没有确切的对应对等体;IEnumerable<T>是最接近的。

票数 10
EN

Stack Overflow用户

发布于 2013-06-04 09:39:51

ICollection<T>ICollection实际上是非常不同的接口,不幸的是,它们共享一个名称,没有太多其他东西。

来自https://docs.microsoft.com/en-us/archive/blogs/kcwalina/system-collections-vs-system-collection-generic-and-system-collections-objectmodel

ICollection<T>看起来很像ICollection,但它实际上是一个非常不同的抽象。我们发现ICollection并不是很有用。同时,我们没有表示读/写非索引集合的抽象。ICollection<T>就是这样的抽象,您可以说ICollection在泛型世界中没有确切的对应对等体;IEnumerable<T>是最接近的。

票数 6
EN

Stack Overflow用户

发布于 2010-03-01 09:13:00

首先,可能出于同样的原因,IList<T>也没有实现IListIList<T>实现:ICollection<T>, IEnumerable<T>, IEnumerable

ICollection的某些部分并不是必需的,但在其发布后更改接口充其量也就是破坏。

看看ICollection:

代码语言:javascript
复制
public interface ICollection : IEnumerable
{
    void CopyTo(Array array, int index);

    int Count { get; }
    bool IsSynchronized { get; }
    object SyncRoot { get; }
}

在大多数情况下,它不是你需要的属性,当我想要一个Collection时,我从来没有需要过它,也不想实现它。我认为这是一个陈旧的推理,但你必须向.Net团队寻求肯定的答案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2353346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档