博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#枚举器接口IEnumerator的实现
阅读量:6328 次
发布时间:2019-06-22

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

原文(http://blog.csdn.net/phpxin123/article/details/7897226)

   在C#中,如果一个类要使用foreach结构来实现迭代,就必须实现IEnumerable或IEnumerator接口。其中,IEnumerator接口定义了实现枚举器模式的方法IEnumerator.MoveNext()和IEnumerator.Reset()和成员属性IEnumerator.Count,而IEnumerable接口的唯一方法IEnumerable.GetEnumerator()仅用来返回一个IEnumerator对象,用来间接实现一个IEnumerator接口。

    而泛型的IEnumerator<T>和IEnumerable<T>接口与普通类型的相似,它们是普通类型枚举器接口的泛化形式。但实现IEnumerable<T>接口,需要实现两个GetEnumerator,分别为IEnumerator IEnumerable.GetEnumerator()和IEnumerator<T> GetEnumerator()。

    1、IEnumerator的实现

        自己找例子看.....

    2、IEnumerable的实现

     (1)返回一个IEnumerator

            自己找例子看.....

     (2)使用yield return(yield break)语法

           自己找例子看看.....

    3、一种混合实现的结构

       在一个类(如ClassName1)中实现IEnumerable接口,而在另一个类(如ClassName1Enumerator)中实现IEnumerator接口,并在ClassName1中的GetEnumerator()方法中,返回一个用ClassName1实例化的ClassName1Enumerator对象。

     4、枚举器具体介绍 

       枚举器可用于读取集合中的数据,但不能用于修改基础集合。

最初,枚举器被定位于集合中第一个元素的前面。 方法还将枚举器返回到此位置。在此位置,调用 属性会引发异常。因此,在读取 的值之前,必须先通过调用 方法将枚举器前移到集合中的第一个元素。

       在调用 或 之前, 返回同一对象。 将 设置到下一个元素。

如果 越过集合的末尾,则枚举器将放置在集合中最后一个元素的后面,而且 返回false。当枚举器位于此位置时,对 的后续调用也返回false。如果最后一次调用 返回了false,则调用  会引发异常。若要再次将 设置为集合的第一个元素,可以调用,然后再调用。

只要该集合保持不变,枚举器也就保持有效。如果对该集合进行了更改(例如添加、修改或删除元素),则该枚举数变为无效(这一变化是不可恢复的),并且下次调用 或 将引发。如果在 和 之间修改了集合,则 会返回已将它设置为的元素,即使该枚举数已失效。

       该枚举器不具有独占访问集合的权限;因此,枚举整个集合本质上不是一个线程安全的过程。即使集合已同步,其他线程仍可以修改集合,从而使枚举数引发异常。若要确保枚举过程中的线程安全性,可以在整个枚举期间锁定集合,或者捕获由其他线程进行的更改所导致的异常。

转载于:https://www.cnblogs.com/ghw0501/p/4733834.html

你可能感兴趣的文章
Java中的异常处理:何时抛出异常,何时捕获异常,何时处理异常?
查看>>
css3中的变形(transform)、过渡(transtion)、动画(animation)
查看>>
tomcat生产环境JDK部署及虚拟主机等常用配置详解
查看>>
web服务器tomcat入门实战
查看>>
AVEVA CSG 几何图形输出接口
查看>>
POJ 2653 Pick-up sticks(几何)
查看>>
【阶段试题分析】阶段一试题总结
查看>>
Python 模块调用
查看>>
HBase篇--HBase常用优化
查看>>
CMarkUp介绍
查看>>
Java基本语法-----java流程控制语句
查看>>
【面试 网络协议】【第十四篇】网络协议篇
查看>>
指令汇B新闻客户端开发(二) 主页面布局
查看>>
获取文本区域(textarea)行数【换行获取输入用户名个数】
查看>>
Mysql常用命令详解
查看>>
Android中实现iPhone开关
查看>>
是男人就下100层【第二层】——帮美女更衣(1)
查看>>
Web应用程序设计十个建议
查看>>
//……关于报文
查看>>
C语言学习-进制转换、变量
查看>>