中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中怎么實現迭代器模式

發布時間:2021-07-07 17:08:08 來源:億速云 閱讀:161 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關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#中怎么實現迭代器模式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莲花县| 康平县| 娱乐| 石楼县| 五原县| 鹤庆县| 鄯善县| 顺义区| 汶川县| 中方县| 平山县| 湛江市| 平顺县| 通州区| 察隅县| 桐梓县| 渭源县| 东乡县| 巩义市| 衡阳县| 芒康县| 华安县| 兴海县| 乌鲁木齐市| 钟祥市| 福清市| 海阳市| 普兰县| 新田县| 涡阳县| 齐齐哈尔市| 金山区| 利川市| 新闻| 平湖市| 商洛市| 新竹县| 嵊泗县| 英德市| 昌图县| 陈巴尔虎旗|