国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#迭代器模式(Iterator Pattern)實例教程

2020-01-24 02:25:29
字體:
來源:轉載
供稿:網友

本文以實例形式簡單簡述了C#迭代器模式的實現方法,分享給大家供大家參考。具體方法如下:

一般來說,迭代器模式的需求來自:需要對一些集合進行迭代,而迭代的方式可能有很多種。

說到迭代,動作大致包括設置第一個位置,獲取下一個位置元素,判斷是否迭代結束,獲取當前位置元素,大致就這么些。把這些迭代動作封裝到一個接口中。

public interface IIterator{    void First();    string Next();    bool IsDone();    string Current();}

在現實場景中,迭代的方式可能有很多種,先實現一種迭代方式,實現IIterator接口。

public class IWannaIterate : IIterator{    private List<string> _list;    private int position;    public IWannaIterate(List<string> list)    {      Console.WriteLine("我要感謝IIterator,有了它我才可以迭代");      _list = list;      position = 0;    }    public void First()    {      position = 0;    }    public string Next()    {      return _list[position++];    }    public bool IsDone()    {      return position >= _list.Count;    }    public string Current()    {      return _list[position];    }}

以上,迭代器IWannaIterate類內部維護這一個集合,而這個集合是通過構造函數賦值的,否則的話,迭代器就沒活干了。 

好了,迭代器,迭代的具體方式有了,迭代器給誰用呢?

只要一個類維護著集合,就可能用到以上實現IIterator接口的某種具體迭代器。所有需要迭代器的類都有一個共同的動作,就是創建一個迭代器。先把創建迭代器的動作抽象成接口。

public interface IManagement{    IIterator CreateIterator();}

假設有一個管理用戶集合的類,使用以上的IWannaIterate迭代器。

public class MyUserManagement : IManagement{    private List<string> _users;    public MyUserManagement()    {      _users = new List<string>();      _users.Add("hello");      _users.Add("world");      _users.Add("nice");    }    public IIterator CreateIterator()    {      return new IWannaIterate(_users);    }}

假設有一個管理Book集合的類,也使用以上的IWannaIterate迭代器。

public class MyBookManagement : IManagement{    private List<string> _books;    public MyBookManagement()    {      _books = new List<string>();      _books.Add("美麗世界");      _books.Add("你好嗎");    }    public IIterator CreateIterator()    {      return new IWannaIterate(_books);    }}

客戶端讓MyUserManagement和MyBookManagement創建各自的迭代器,然后使用迭代器把集合的所有元素打印出來。

class Program{    static void Main(string[] args)    {      IManagement magageA = new MyUserManagement();      IManagement manageB = new MyBookManagement();      IIterator iteratorA = magageA.CreateIterator();      IIterator iteratorB = manageB.CreateIterator();      Console.WriteLine("打印出的user列表");      PrintList(iteratorA);      Console.WriteLine();      Console.WriteLine("打印出book列表");      PrintList(iteratorB);      Console.ReadKey();    }    private static void PrintList(IIterator iterator)    {      while (!iterator.IsDone())      {        Console.WriteLine(iterator.Next());      }    }}

運行結果如下圖所示:

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祥云县| 大丰市| 九台市| 五指山市| 浙江省| 玉溪市| 迭部县| 通江县| 汤原县| 喀喇| 华容县| 通州市| 象州县| 武清区| 鸡东县| 平凉市| 抚远县| 安新县| 读书| 拜城县| 莫力| 宜川县| 灵山县| 抚州市| 离岛区| 惠安县| 湖州市| 高平市| 大英县| 通辽市| 上栗县| 邛崃市| 临沂市| 大悟县| 建瓯市| 南和县| 西峡县| 澳门| 泽州县| 亳州市| 本溪市|