C#迭代器形式(Iterator Pattern)實例教程。本站提示廣大學習愛好者:(C#迭代器形式(Iterator Pattern)實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#迭代器形式(Iterator Pattern)實例教程正文
本文以實例情勢簡略簡述了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#法式設計有所贊助。