在C#中,数组的实现是System.Array类的实例,它们只是集合类的一种。集合类能够处理对象列表,它的功能要比数组强大。因为集合类通过实现System.Collections命名空间中的接口实现处理功能,所以其中集合的语法都符合标准化。
集合使用接口来实现功能,这个接口不仅没有限制使用的基本集合类,而且还可以创建一个自定义的集合类。这样从集合内提取数据时,就不需要把它们特意转换为专用的类型了。
在System.Collections命名空间中,可以通过如下接口提供基本集合功能。
IEnumerable,用于迭代集合项。
ICollection,能够获取集合项的个数,并把项复制到一个简单的数组类型中。
IList,提供了集合项列表,并访问这些项和一些与项列表相关的功能。
Idictionary,和IList类似,但是它能够通过键码值访问项列表。
其中,System.Collections.ICollection是所有集合的基接口,具体声明格式如下:
因为System.Collections.ICollection继承了System.Collections.IEnumerable,并没有添加任何的成员。所以可以完全等价于System.Collections.IEnumerable接口,即所有的集合类都必须实现System.Collections.IEnumerable接口。当类实现了这个接口后,就可以依次列举集合类内所包含的数据元素。IEnumerable接口的定义格式如下:
IEnumerable接口只包含一个方法GetEnumerator(),它返回一个能够访问集合数组的列举器对象。列举器必须实现System.Collections.IEnumerator接口,IEnumerator的定义格式如下:(www.xing528.com)
1.列举器
列举器能够读取集合中的数据,即循环访问集合的对象。但是列举器不能修改基础集合,实现IEnumerator接口的类必须实现Reset()函数和MoveNext()函数,以及Current属性。
当创建集合对象后,列举器应该首先定位在集合中的第一个元素前。Reset()函数将列举器返回到此位置,但此时调用Current属性会发生异常。所以在读取Current前必须调用函数MoveNext,将列举器定位在集合的第一个元素。如果在调用Reset()函数和MoveNext()函数之前,Current返回同一个对象,MoveNext()将Current设置为下一个元素。
虽然一个列举器只能与一个集合关联,但是一个集合可以有多个列举器。在C#中,通常使用foreach语句操作列举器,同时隐藏了操作列举器的复杂性。
2.集合容量和集合计数
集合容量即集合所包含的元素数量,而集合计数是它实际包含的元素数目。在System.Collections命名空间中,集合在达到当前容量时会自动扩充容量。
3.集合下限
集合下限是它第一个元素的索引,在System.Collections命名空间中的集合下限都是0。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。