• C#中的ICollection接口


    一、集合类:

    1.1 ICollection接口

      前面我们学习了数组,这是.net Framework定义的最基本的集合类型,除过数组外,.net Framework还另外定义了很多集合类型以满足编程的需要。

    常见的集合有:

    • 向量;
    • 链表;
    • 双端队列;
    • 栈;
    • 树;
    • Hash表;
    • Hash映射。

      所有的这些集合类型,在.net Framework中都必须实现一个重要的接口:ICollection接口。ICollection接口为实现它的类定义了两个主要规范:

    • 集合元素数量(表现为Count属性);
    • 访问集合的迭代子(表现为GetEnumerator方法)。

      其中,GetEnumerator方法是由ICollection的父接口IEnumerable接口继承得来的。

      ICollection接口定义了一个存储和获取object类型对象引用的集合,所以可以存储和获取各种引用类型对象的引用或值类型对象。

    1.2 IEnumerable接口

      IEnumerable接口是ICollection的父接口,凡实现此接口的类,都具备“可迭代”的能力。

      IEnumerable接口只定义了一个方法:GetEnumerator,该方法将返回一个“迭代子”对象(或称为迭代器对象),是一个实现了IEnumerator接口的对象实例。

    图1 ICollection继承层次

    二、迭代子

      迭代子在C++中也称为迭代器,是设计模式中的迭代模式,其存在的意义为:每一种集合都具备不同的存储形式,例如向量使用数组来存储,链表使用对象和对象间的引用来存储,表采用多维数组或十字引用来保存数据,树通过对象和对象间的多个引用来建立关系,图采用树或表来保存其关系……可见不同的集合类存储数据的方式是多样化的。存储的多样性必然导致访问的多样性,集合最常用的访问是“遍历”,即从集合的头部访问到集合的尾部,我们需要想办法使用一种统一的方式遍历访问不同形式的集合。这就是迭代方式产生的基本原因。

      迭代模式将集合类看做一个容量无限的容器,并且容器的存放规则是线性的,即容器里的每一个元素都必须具有一个直接前趋(除过第一个元素)和一个直接后继(除过最后一个元素)容器中具备一个标志,可以指向容器中的任意一个存储单位

      迭代分为两种:单向只向前迭代和双向迭代

    2.1 单向只向前迭代模式

      对于单向只向前迭代模式,集合的单元标志只能从集合的某个元素起始逐一向后移动,所以最基本的迭代模式定义了三种操作:

    • 访问标志所在项;
    • 标志前进到下一项并判断是否到达集合末尾;
    • 重新回到初始项。

    图2 单向只向前迭代

     

    2.2 双向迭代模式

      对于双向迭代模式,集合的单元标志即从集合的某个元素起逐一向后移动,也可以从集合的某一个元素起逐一向前移动,所以该类型迭代器定义了四种操作:

    • 访问标志所在当前项;
    • 标志前进到下一项并判断标志是否到达集合末尾;
    • 标志回到前一项并判断标志是否到达集合起始;
    • 回到初始项。

    图3 双向迭代

      .net Framework使用IEnumerator接口定义了一个单向只向前迭代规范。

      ICollection接口继承了IEnumerable接口,该接口定义的GetEnumerator方法可以获取到一个当前集合类对象的迭代子对象,即一个实现了IEnumerator接口的对象。

      凡是实现了IEnumerable接口的类,都可以使用foreach循环迭代遍历。

      IEnumerator接口定义了一个可以遍历object类型对象引用的迭代子,IEnumerable接口定义了获取这种迭代子对象的方法。

     

    三、泛型集合

     

    3.1 ICollection<T>接口

      ICollection<T>接口定义了泛型集合接口,所谓泛型集合,即使用了.net Framework提供的泛型特性,使集合限定为只存储一种特定类型对象引用或值类型的数据的集合。泛型集合增强了集合访问的效率和安全性。

      由于存储类型已被确定,所以ICollection<T>比ICollection接口提供了更多的方法,包括添加到集合,从集合删除以及判断一个对象引用(或对象值)是否在集合中存在。

     

    3.2 IEnumerable<T>接口

      ICollection<T>接口实现了IEnumerable<T>接口,主要用来返回一个实现了实现了IEnumerator<T>接口的,确定类型的迭代子对象

      参考ICollection<T>的继承关系图。

    图4 ICollection<T>接口继承关系图

     

      熟悉上述的系列接口,这是我们后面学习各种集合类对象的基础。

  • 相关阅读:
    快速排序算法
    学习了几天的jQuery Mobile的一点感受
    jQuery Mobile 图标无法显示
    html5基础知识
    百度地图与谷歌地图 (常识、区别,更倾向于使用百度地图,纠错信息比谷歌多)
    (转)百度Map API
    历年软件设计师下午考试试题汇总统计
    HTML5的本地存储
    EnterpriseArchitectect 软件的勾选的几个选项对应的中文意思
    访问权限控制表
  • 原文地址:https://www.cnblogs.com/gc2013/p/3951696.html
Copyright © 2020-2023  润新知