您的位置:首页 > 编程语言 > C#

C#基础知识整理:基础知识(15) ICollection、迭代及泛型

2012-10-18 17:45 323 查看
1、ICollection接口
数组是.net framework定义的最基本的集合类型,除了数组,.net framework还定义了很多集合类型。打开msdn可以看到,所有集合都在System.Collections命名空间下:
集合类:
ArrayList:使用大小可按需动态增加的数组实现IList接口。
BitArray:管理值的压缩数组,该值表示为布尔值,true表示位是打开的(1),false表示位是关闭的(0)。
CaseInsensitiveComparer:比较两个对象是否相等,比较时忽略字符串的大小写。
CollectionBase:为强类型集合提供 abstract 基类。
Comparer:比较两个对象是否相等,其中字符串比较是区分大小写的。
DictionaryBase:为键/值对的强类型集合提供 abstract 基类
Hashtable:表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。
Queue:表示对象的先进先出集合
ReadOnlyCollectionBase:为强类型非泛型只读集合提供 abstract 基类。
SortedList:表示键/值对的集合,这些键值对按键排序并可按照键和索引访问。
Stack:表示对象的简单的后进先出非泛型集合。
接口:
ICollection :定义所有非泛型集合的大小、枚举数和同步方法。
IComparer:公开一种比较两个对象的方法。
IDictionary:表示键/值对的非通用集合。
IDictionaryEnumerator:枚举非泛型字典的元素。
IEnumerable:公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
IEnumerator:支持对非泛型集合的简单迭代。
IEqualityComparer:定义方法以支持对象的相等比较。
IList:表示可按照索引单独访问的对象的非泛型集合。
主要看一下ICollection接口和IEnumerable接口。
ICollection:
该接口为其实现类定义了两个主要规范:
(1)集合元素个数,即Count属性;
(2)迭代(GetEnumerator方法)。
GetEnumertor方法时由ICollection的父接口IEumerable继承而来的。ICollection接口定义了一个存储和获取object类型对象引用的集合,这样可以存储和获取各种引用类型对象的引用或值类型对象。
IEnumerable接口:
该接口是ICollection的父接口,这个接口为其实现的类提供了可迭代的能力。IEumerable接口只有一个GetEnumerator方法,返回一个循环访问集合的枚举数
2、迭代
迭代,也叫迭代器,也就是设计模式中的迭代模式,意义是:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。因为集合的存储方式各不相同,List是连续存储,链表使用对象间的引用存储... ...那么当需要遍历集合时就不方便,就需要一种能遍历所有不同的集合的方法,这就有了迭代器。
迭代器将结合类看做一个无限容量的容器,存放规则是线性的。也就是除第一个和最后一个外每一个元素具有一个直接前驱和直接后继,容器中具备一个标志,可以指向容器中任意一个存储单位。有两种方式:单向迭代和双向迭代。
(1)、单向迭代
单向迭代指只向前迭代,集合的单元标志只能从集合的某个元素起始逐一向后移动,所以,迭代定义了三种操作:
a、当前项
b、到下一项并判断是否末尾
c、回到初始项

(2)、双向迭代模式
对于双向迭代模式,集合的单元标志即从集合的某项起逐一向后移动,也可以从集合的某项起逐一向前移动,因此,有四种操作:
a、当前项
b、前进至下一项并判断是否末尾
c、回到前一项并判断是否是集合开头
d、返回初始位置
.net framework使用IEumerable接口定义了一个单向迭代规范。ICollection接口继承了IEumerable接口,该接口定义的GetEnumerator方法可以获取到一个当前集合类对象的迭代对象,即一个实现了IEumerable接口的对象。
凡是实现了IEnumerable接口的类,都可以使用foreach循环迭代遍历。
IEnumerator接口定义了一个可以遍历object类型对象引用的迭代子,IEnumerable接口定义了获取这种迭代子对象的方法。
3、泛型集合
ICollection<T>接口
ICollection<T>接口定义了泛型集合接口,所谓泛型集合,即使用了.net Framework提供的泛型特性,使集合限定为只存储一种特定类型对象引用或值类型的数据的集合。泛型集合增强了集合访问的效率和安全性。
由于存储类型已被确定,所以ICollection<T>比ICollection接口提供了更多的方法,包括添加到集合,从集合删除以及判断一个对象引用(或对象值)是否在集合中存在。
IEnumerable<T>接口
ICollection<T>接口实现了IEnumerable<T>接口,主要用来返回一个实现了实现了IEnumerator<T>接口的,确定类型的迭代子对象。

本文出自 “西北白杨树” 博客,请务必保留此出处http://yangyoushan.blog.51cto.com/7229571/1276445
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: