System.Collections名称空间的几个接口提供了基本的集合功能:IEnumerable,ICollection继承自IEnumerable,IList继承自IEnumerable和ICollection,IDictionary继承自IEnumerable和ICollection。
上一节讲了几个集合有关的基本方法来使用集合。这一节则根据自己的需要定义强化类型的集合。System.Collections.CollectionBase类提供了集合的大量实现代码,我们可以使用派生出自己的集合类。
添加类MyCollections,继承CollectionBase,这样我们就创建了一个自己的集合类,然后我们继承其中的方法,并按照自己的要求进行设定。
如下例子中,Add()方法和Remove()方法都设定了传参类型必须是string,否则会报错。
当我们实例化这个自定义的集合类的时候,如果参数不是string类型,则会发生报错。
和基类的集合一样,可以使用foreach进行迭代,打印除List中的所有元素。
集合是一个容器,容器中的元素不仅可以是一个值类型,也能是引用类型,也就是可以是一个对象。
这样我们把一个叫做”Sunny”的人放进容器,就可以在容器里面读取出来。
列表类的集合,可以通过下标(或者索引)读取里面的元素。但是我们自定义的这个集合,却没有这个特性,强行使用这种方式Console.WriteLine(myCol[0].peopleName);,会引发异常:無法套用有 [] 的索引至類型 'test2.MyCollections' 的運算式 (CS0021) - D:ProjectsTESTtest2Program.cs:17,22。
通过索引来访问集合的元素,需要使用索引符。
索引符的格式有点类似属性,this关键字和[]一起使用,编译器会直到这里建立了一个索引。
(People)List[index]是一个显示的类型转换形式,因为继承的IList默认是System.Object。
使用索引符后,编译时就能识别自定义集合的索引方式。
发表评论