我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C# 中怎么利用Iterator实现迭代器模式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C# 中怎么利用Iterator实现迭代器模式

本篇文章给大家分享的是有关C# 中怎么利用Iterator实现迭代器模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

C# Iterator迭代器模式我们在平时的开发中应该经常用到。不直接使用也会间接使用,我们使用foreach语句来循环就是在间接的使用C# Iterator迭代器模式。

迭代器就像指针一样可以向前向后移动,在.NET中迭代器只能向后移动。

动机:在软件的构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式。

意图:提供一种方法顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表示。

public interface IEnumerable{  //得到迭代器  IEnumerator GetEnumerator();  }  /// <summary> /// 迭代器接口  /// summary> public interface IEnumerator{  //得到当前的对象  object Current{  get;  }  bool MoveNext();  void Reset();  }  /// <summary> /// 集合类型,实现了可迭代接口  /// summary> public class MyCollection : IEnumerable{  internal int[] items;  public MyCollection(){  items = new int[5] {1, 2, 3, 4, 5};  }  #region IEnumerable 成员  //实现迭代接口,返回迭代器  public IEnumerator GetEnumerator(){  //在这里进行解藕,将集合对象转换为迭代器  return new MyEnumerator(this);  }  #endregion  }  //迭代器对象,实现了迭代器接口  internal class MyEnumerator : IEnumerator{  private int nIndex;  MyCollection collection;   //构造函数将集合类型转换成内部成员  public MyEnumerator(MyCollection coll){  this.collection = coll;  nIndex = -1;  }  #region IEnumerator 成员  //返回当前迭代到的对象  public object Current{  get{  return collection.items[nIndex];  }  }  //移动到下一个对象,指针向后移动  public bool MoveNext(){  nIndex++;  return (nIndex < collection.items.GetLength(0));  }  //重设迭代器,指针回零  public void Reset(){  nIndex = -1;  }  #endregion  }

很清楚,在上面的代码中,我们通过GetEnumerator方法,将集合对象转换为了可迭代对象,这实际上是在对集合对象进行抽象,将他转换为迭代器。在这里,我们需要定义一个迭代器类,但是这是.NET 1.1中的做法,在.NET 2.0以后实现一个可迭代模式更加简单。

/// <summary> /// 集合类型,实现了可迭代接口  /// summary> public class MyCollection : IEnumerable<int> {  internal int[] items;   public MyCollection()  {  items = new int[5] {1, 2, 3, 4, 5};  }   #region IEnumerable<int> 成员   public IEnumerator<int> GetEnumerator()  {  for(int i = 0; i < items.Length; i++)  {  yield return items[i];  }  }  #endregion   #region IEnumerable 成员   System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()  {  for(int i = 0; i < items.Length; i++)  {  yield return items[i];  }  }   #endregion  }

我们通过yield return关键字来返回一个IEnumerator接口,这个关键在在编译之后会自动生成对应的迭代器的代码。

在.NET中迭代器只能先前,在c++中可以向后等其他操作。

注意:在迭代的过程中,我们不能向集合添加内容,后移除集合里的item,这样将会导致一些问题的出现。以上介绍C# Iterator迭代器模式。

以上就是C# 中怎么利用Iterator实现迭代器模式,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C# 中怎么利用Iterator实现迭代器模式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C# 中怎么利用Iterator实现迭代器模式

本篇文章给大家分享的是有关C# 中怎么利用Iterator实现迭代器模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C# Iterator迭代器模式我们在平时的开发中应该经常
2023-06-18

C#中怎么实现迭代器模式

这篇文章将为大家详细讲解有关C#中怎么实现迭代器模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在我们的应用程序中常常有这样一些数据结构:它们是一个数据的集合,如果你知道它们内部的实现结构
2023-06-17

C++迭代器iterator怎么使用

C++迭代器(iterator)是一种用于访问容器中元素的对象,可以用来遍历容器中的元素,或者修改容器中的元素。首先,你需要在代码中包含迭代器所在的头文件:```cpp#include ```然后,对于容器类型(如vector、list、m
2023-08-15

使用Java怎么实现一个Iterator迭代器

这期内容当中小编将会给大家带来有关使用Java怎么实现一个Iterator迭代器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。package me.socketthread;import java.uti
2023-05-30

PHP设计模式之迭代器模式怎么实现

本篇内容主要讲解“PHP设计模式之迭代器模式怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP设计模式之迭代器模式怎么实现”吧!迭代器模式迭代器模式(Iterator Pattern)
2023-07-05

C++中怎么利用LeetCode实现二叉搜索树迭代器

C++中怎么利用LeetCode实现二叉搜索树迭代器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。[LeetCode] 173.Binary Search Tr
2023-06-20

python中怎么利用class类实现可迭代

今天就跟大家聊聊有关python中怎么利用class类实现可迭代,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 当定义一个普通的类时,指向类的实例默认情况下是不可迭代的,如下In
2023-06-01

怎么在python中利用reversed实现反向迭代

今天就跟大家聊聊有关怎么在python中利用reversed实现反向迭代,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发
2023-06-14

迭代器模式如何在java项目中实现

迭代器模式如何在java项目中实现 ?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java 迭代器模式实例详解首先,为什么使用迭代器模式,目的就是通过一个通用的迭代方法,隐
2023-05-31

怎么在java中利用二分查找实现迭代

怎么在java中利用二分查找实现迭代?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统
2023-06-14

怎么利用Matlab实现迭代适应点算法

本篇内容主要讲解“怎么利用Matlab实现迭代适应点算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用Matlab实现迭代适应点算法”吧!道格拉斯-普克算法(Douglas–
2023-06-29

C++中的容器和迭代器怎么使用

在C++中,容器和迭代器是用来存储和访问数据的重要概念。容器是一种数据结构,用来存储多个元素,而迭代器是一种指针-like 对象,用来遍历容器中的元素。下面是一个简单的例子,展示了如何使用容器和迭代器:#include
C++中的容器和迭代器怎么使用
2024-03-11

怎么解析C++ 的STL迭代器原理和实现

怎么解析C++ 的STL迭代器原理和实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 迭代器简介为了提高C++编程的效率,STL(Standard Tem
2023-06-26

Python中的迭代器模式和生成器模式的适用场景是什么?

Python中的迭代器模式和生成器模式的适用场景是什么?迭代器模式和生成器模式是两种常用的设计模式,它们都用于处理集合(容器)中的元素,使得对集合的遍历更加简洁高效。下面将具体介绍这两种模式的适用场景,并提供相应的代码示例。迭代器模式是一种
2023-10-22

C++中怎么实现单件模式

C++中怎么实现单件模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++单件模式代码示例:class Singleton { public: stat
2023-06-17

C++利用代理模式实现远程代理,虚拟代理和保护代理

今天给大家简单介绍代理模式,一个很简单的设计模式,旨在不改变原对象的情况下通过代理对象来控制对原对象的访问。代理模式根据具体情况还可以分为远程代理、虚拟代理、保护代理等,下面来介绍一下
2023-05-18

C++中的策略模式怎么实现

本文小编为大家详细介绍“C++中的策略模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中的策略模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。策略模式主要解决在有多种算法相似的情况下,
2023-07-05

C++中的工厂模式怎么实现

这篇文章主要讲解了“C++中的工厂模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的工厂模式怎么实现”吧!工厂模式中使用了多态的原理,来将具体实现和接口进行有效的解耦合,符
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录