C#基础知识整理:基础知识(15) ICollection、迭代及泛型
发布日期:2021-11-07 06:41:00 浏览次数:10 分类:技术文章

本文共 2157 字,大约阅读时间需要 7 分钟。

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>接口的,确定类型的迭代子对象。

 

转载地址:https://blog.csdn.net/yysyangyangyangshan/article/details/8086828 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:莫名其妙的异常004:“.”(十六进制值 0x00)是无效的字符
下一篇:C#基础知识整理:基础知识(14) 数组

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月05日 00时39分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【RPC系列】4、自定义xml标签(用netty、zk手写RPC第一步) 2019-04-21
【RPC系列】5、向Zookeeper上注册服务(用netty、zk手写RPC第二步) 2019-04-21
【Python问题】解决pip install xxx出现Cannot open ...\venv\Scripts\pip-script.py问题 2019-04-21
【茶余饭后】安装Apache配置正向代理和反向代理 2019-04-21
【茶余饭后】开发微信小程序准备工作 2019-04-21
【开发笔记】支付项目:1、证书加解密、签名验签 2019-04-21
【读书笔记】WEB应用:1、日志配置 2019-04-21
【开发笔记】茶余饭后:2、Java问题排查(压力测试性能监控) 2019-04-21
【读书笔记】JAVA基础:1、深入理解JVM 2019-04-21
【开发笔记】茶余饭后:1、CAT监控搭建部署(windows) 2019-04-21
【开发工具】JAVA性能分析:1、超详细的JProfiler安装使用(具体数据分析见2) 2019-04-21
【开发工具】JAVA性能分析:2、超详细的JProfiler数据分析(官方中文版) 2019-04-21
【开发工具】JAVA性能分析:3、超详细的JProfiler快照分析(官方中文版) 2019-04-21
【开发工具】JAVA性能分析:4、超详细的JProfiler遥测分析(官方中文版) 2019-04-21
【开发工具】JAVA性能分析:5、超详细的JProfilerCPU分析(官方中文版) 2019-04-21
【开发工具】JAVA性能分析:6、超详细的JProfiler内存分析(官方中文版) 2019-04-21
【开发工具】Consul使用:1、介绍及安装 2019-04-21
mybatis获取表名_mybatis plus 的动态表名的配置详解 2019-04-21
mysql按升序创建索引_MySQL 降序索引 2019-04-21
get 参数太长怎么办_新买的手表表带太长了该怎么办?表带调节操作方法get你~... 2019-04-21