C#学习笔记(八):集合
2006-01-16 10:54 努力学习的小熊 阅读(1543) 评论(0) 编辑 收藏 举报数组最大的限制就是一旦创建好数组,它们的大小就是固定的,不能在现有的数组末尾添加新项目,除非创建一个新的数组。
C#中的数组是作为System.Array类的实例来执行的,它们只是集合类中的一种。集合类一般用于处理对象列表,其功能要比简单数组要多,这些功能是通过执行System.Collections名称空间中的接口而实现的,因此集合的语法已经标准化了。
在System.Collections名称空间中有许多接口都提供了基本的集合功能:
1.IEnumerable提供了循环集合中项目的功能。
2.ICollection(继承于IEnumerable)可以获取集合中项目的个数,并能把项目复制到一个简单的数组类型中。
3.IList(继承于IEnumerable和ICollection)提供了集合的项目列表,并可以访问这些项目,以及其他一些与项目列表相关的功能。
4.IDictionary(继承于IEnumerable和ICollection)类似于IList,但提供了可通过键码值而不是索引访问的项目列表。
System.Array类继承了IList,ICollection和IEnumerable,但不支持IList的一些更高级的功能,表示大小固定的一个项目列表。
System.Collections.ArrayList也执行IList,ICollection和IEnumerable接口,但执行的方式比System.Array更复杂。数组的大小是固定的(不能增加或删除元素),而这个类可以用于表示大小可变的项目列表。
可以从一个类派生自己的集合System.Collections.CollectionBase(强类型集合),CollectionBase提供了两个受保护的属性,它们可以访问存储的对象本身。List可以通过IList接口访问项目,InnerList则是用于存储项目的ArrayList对象。
在为一个集合类添加索引后,因为IList.List属性返回一个System.Object对象,所以在返回时需要进行显式数据类型转换。
public class Animals : CollectionBase
{
public Animal this[int animalIndex]
{
get{return (Animal)List[animalIndex];}
set{List[animalIndex] = value;}
}
}
这样我们就为这个索引符定义了一个类型,使用该索引符访问一个项目时,就可以得到这个类型:
animalCollection[0].Feed();
而不需要读取出项目后在进行相应的类型转换:
((Animal)animalCollection[0]).Feed();