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

发布时间:2021-07-07 17:08:08 作者:Leah
来源:亿速云 阅读:161

这篇文章将为大家详细讲解有关C#中怎么实现迭代器模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在我们的应用程序中常常有这样一些数据结构:

它们是一个数据的集合,如果你知道它们内部的实现结构就可以去访问它们,它们各自的内部存储结构互不相同,各种集合有各自的应用场合.说到这里大家可能想出一大堆这样的集合了:List,Hashtable,ArrayList等等。这些集合各自都有各自的个性,这就是它们存在的理由。但如果你想遍历它你必须知道它内部的存储细节,作为一个集合元素,把内部细节暴露出来肯定就不好了,这样客户程序就不够稳定了,在你更换集合对象的时候,比如List 不能满足需求的时候,你换成Hashtable,因为以前的客户程序过多的关注了List内部实现的细节,所以不能很好的移植。而C#迭代器模式就是为解决这个问题而生的:

提供一种一致的方式访问集合对象中的元素,而无需暴露集合对象的内部表示。

比如现在有这样一个需求,遍历集合内的元素,然后输出,但是并不限定集合是什么类型的集合,也就是未来集合可能发生改变。

思考:

集合会发生改变,这是变化点,集合改变了,遍历方法也改变,我们要保证遍历的方法稳定,那么就要屏蔽掉细节。找到了变化点那我们就将其隔离起来(一般使用interface作为隔离手段):假设所有的集合都继承自ICollection接口,这个接口用来隔离具体集合的,将集合屏蔽在接口后面,作为遍历我们肯定需要这样一些方法:MoveNext,Current,既然ICollection负责数据存储,职责又要单一,那么就新建立一个接口叫做 Iterator吧,每种具体的集合都有自己相对应的Iterator实现:

public interface ICollection  {  int Count { get; }  ///   /// 获取迭代器  ///   /// 迭代器  Iterator GetIterator();  }  ///   /// 迭代器接口  ///   public interface Iterator  {  bool MoveNext();   object Current { get; }  }   public class List : ICollection  {  private const int MAX = 10;  private object[] items;  public List()  {   items = new object[MAX];  }  public object this[int i]  {  get { return items[i]; }  set { this.items[i] = value; }  }  #region ICollection Members   public int Count  {  get { return items.Length; }  }   public Iterator GetIterator()  {  return new ListIterator(this);  }   #endregion  }  public class ListIterator : Iterator  {  private int index = 0;  private ICollection list;  public ListIterator(ICollection list)  {  this.list = list;  index = 0;  }  #region Iterator Members   public bool MoveNext()  {  if (index + 1 > list.Count)  return false;  else  {   index++;  return true;  }  }   public object Current  {  get { return list[index]; }  }   #endregion  }  ///   /// 测试  ///   public class Program  {  static void Main()  {  ICollection list = new List();  Iterator iterator = list.GetIterator();  while (iterator.MoveNext())  {  object current = iterator.Current;  }  }  }

关于C#中怎么实现迭代器模式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 如何使用javascript中的迭代器模式
  2. C#中迭代器模式的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:php常量和变量的区别是什么

下一篇:php定义常量方法的不同

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》