使用IEnumerable和ICollection与IList的自定义集合

Fur*_*dar 21 c# ienumerable ilist icollection custom-collection

我需要设计自己的自定义GenericCollection类.现在我有很多选择使用以获得它IEnumerable,ICollectionIList,在后来提供了一些附加功能.

我很困惑,如果我和我一起去,IEnumerable<T>我可能需要声明对象实际上像这种情况一样持有集合_list.

public class GenericCollection<T> : IEnumerable<T>
{
    private List<T> _list;
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是如果我使用ICollection<T>或者IList<T>,我不需要声明List对象,因为它是隐式可用的.

public class GenericCollection<T> : IList<T>
{
    // no need for List object
    //private List<T> _list; 
    //...
}
Run Code Online (Sandbox Code Playgroud)

这两种方法在性能方面有何不同?

在哪种情况下,每个人都是首选,特别是在设计自己的集合时.我对轻量级收藏感兴趣,性能良好.我认为这可以通过使用,IEnumerable<T>但是如何与一些强有力的理由一起使用呢?

我已经审查了一些现有的帖子,但没有提供所需的信息.

返回'IList'与'ICollection'对比'收集'

Tim*_* S. 46

IEnumerable,ICollectionIList(通常,任何带I前缀的类型)只是接口.它们允许您公开您的类将要执行的操作,但与继承类不同,接口不会为您提供他们必须执行的任何操作的默认实现.

至于选择哪个界面,这里有一个快速指南:

  • An IListICollection可以通过索引访问的.
  • 一个ICollection是一个IEnumerable容易获得喜欢的东西Add,RemoveCount.
  • 一个IEnumerable是可枚举的任何东西,即使这些东西的列表在您枚举之前不存在.

您可能要扩展(或保留为运行大多数逻辑私有字段)为您收集一些类List<T>,Collection<T>它实现了,(IList<T>但有压倒一切的实现更容易访问,请参阅收集<T>对名单<T>你应该在你的接口上使用什么?对于这两者之间的巨大差异)ObservableCollection<T>,或者不是列表的集合,比如Dictionary<T, U>HashSet<T>.有关其中任何一项的更多信息,请查阅该课程上的MSDN文档.