接口主要用作函数的参数或返回类型,以支持“SOLID”设计原则中的“接口隔离原则(Interface Segregation Principle)”,使强制转换更容易,支持将多个具体类型传递给接口参数,并从公共函数的客户端隐藏(封装)实际参数类型。
非常基础,它公开了枚举器,支持对非泛型集合进行简单迭代。
[ComVisibleAttribute(true)]
public interface IEnumerable
ICollection
接口扩展了IEnumerable
接口;IDictionary
和IList
是更专业化的接口,它们都扩展了ICollection
接口。一个IDictionary
实现是一组键/值对,就像Hashtable
类一样。一个IList
实现是一组值,并且它的成员可以通过索引访问,就像ArrayList
类一样。
一些限制元素访问的集合,如Queue
类和Stack
类,直接实现ICollection
接口。
如果既不需要IDictionary
接口,也不需要IList
接口来满足所需集合的要求,则从ICollection
接口派生新的集合类以获得更大的灵活性。
[ComVisibleAttribute(true)]
public interface ICollection : IEnumerable
以下是关于
IList
接口的信息:
[ComVisibleAttribute(true)]
public interface IList : ICollection, IEnumerable
MSDN中有更多关于IList的内容:
IList
是
ICollection
接口和所有非泛型列表的基本接口。IList实现分为三类:只读、固定大小和可变大小。只读IList不能被修改。固定大小IList不允许添加或删除元素,但允许修改现有元素。可变大小IList允许添加、删除和修改元素。
提示:
如果你只希望为集合参数支持foreach语句,
IEnumerable
就足够了。如果你还希望支持向集合中添加和删除元素,
IList
则是更好的选择。
建议:
这篇博客文章:
IEnumerable, ICollection, IList Compared一定会帮助你做出更好和精确的决策。
此外,查看
该文章可以了解IList和IEnumerable的性能和其他比较。
String.Join
在.NET 4时期添加了一个重载,以便它接受一个IEnumerable
。接受数组的重载来自于泛型之前的时代... - Damien_The_Unbeliever