知识大全 C#中的Iterator迭代器模式

Posted

篇首语:心境是可以把地狱变成天堂,也可以把天堂变成地狱。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中的Iterator迭代器模式相关的知识,希望对你有一定的参考价值。

C#中的Iterator迭代器模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

迭代器模式我们在平时的开发中应该经常用到 不直接使用也会间接使用 我们使用foreach语句来循环就是在间接的使用迭代器模式   迭代器就像指针一样可以向前向后移动 中迭代器只能向后移动    动机 在软件的构建过程中 集合对象内部结构常常变化各异 但对于这些集合对象 我们希望在不暴露其内部结构的同时 可以让外部客户代码透明地访问其中包含的元素 同时这种 透明遍历 也为 同一种算法在多种集合对象上进行操作 提供了可能 使用面向对象技术将这种遍历机制抽象为 迭代器对象 为 应对变化中的集合对象 提供了一种优雅的方式    意图 提供一种方法顺序访问一个集合对象中的各个元素 而不暴露该对象的内部表示    /// <summary> /// 可迭代接口 /// </summary> 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[ ] ; #region IEnumerable 成员 //实现迭代接口 返回迭代器 public IEnumerator GetEnumerator() //在这里进行解藕 将集合对象转换为迭代器 return new MyEnumerator(this); #endregion //迭代器对象 实现了迭代器接口 internal class MyEnumerator : IEnumerator private int nIndex; MyCollection collection;

    //构造函数将集合类型转换成内部成员 public MyEnumerator(MyCollection coll) llection = coll; nIndex = ; #region IEnumerator 成员 //返回当前迭代到的对象 public object Current get return ems[nIndex]; //移动到下一个对象 指针向后移动 public bool MoveNext() nIndex++; return (nIndex < ems GetLength( )); //重设迭代器 指针回零 public void Reset() nIndex = ; #endregion

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

 /// <summary> /// 集合类型 实现了可迭代接口 /// </summary> public class MyCollection : IEnumerable<int> internal int[] items; public MyCollection() items = new int[ ] ; #region IEnumerable<int> 成员 public IEnumerator<int> GetEnumerator() for(int i = ; i < items Length; i++) yield return items[i]; #endregion #region IEnumerable 成员 System Collections IEnumerator System Collections IEnumerable GetEnumerator() for(int i = ; i < items Length; i++) yield return items[i]; #endregion   我们通过yield return关键字来返回一个IEnumerator接口 这个关键在在编译之后会自动生成对应的迭代器的代码    中迭代器只能先前 在c++中可以向后等其他操作    注意 在迭代的过程中 我们不能向集合添加内容 后移除集合里的item 这样将会导致一些问题的出现 cha138/Article/program/net/201311/11575

相关参考

知识大全 C#迭代器

C#迭代器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  迭代器是C#中的新功能迭代器是方法ge

知识大全 php设计模式介绍之迭代器模式

  《PHP设计模式介绍》第八章迭代器模式  类中的面向对象编程封装应用逻辑类就是实例化的对象每个单独的对象都有一个特定的身份和状态单独的对象是一种组织代码的有用方法但通常你会处理一组对象或者集合  

知识大全 Java设计模式之迭代器模式

Java设计模式之迭代器模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一引言  迭代这个名词对

知识大全 老生常谈:迭代器模式

    有很多方法可以把对象堆起来成为一个集合你可以把它们放进数组堆栈列表或者是散列表中这是你的自由    迭代器模式定

知识大全 foreach和yield

  foreach  foreach无需要知道集合中元素个数就可以迭代集合中的元素它其实是迭代器模式的一个包装就语言层面来说是while的另一种形式  usingSystem;  usingSyste

知识大全 struts2迭代不同对象的测试

  在平时使用s:iterator这个迭代标签一般我们都是把一个相同类型的多个对象放入一个集合当中那么是否可以放入不相同的对象来迭代呢?日常工作有时候可能是需要这样来简化程序的我今天测试了一下好像完全

知识大全 Java设计模式之Iterator模式介绍

Java设计模式之Iterator模式介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!所谓Ite

知识大全 C#中的Adapter设计模式浅析

C#中的Adapter设计模式浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  意图  把一个

知识大全 Java学习中的Iterator&Comparable

Java学习中的Iterator&Comparable  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Struts标签中的多层logic:iterator详解

Struts标签中的多层logic:iterator详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下