最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年09月12日 15:34:06   投稿:shichen2014  
這篇文章主要介紹了C#迭代器模式(Iterator Pattern),包括了迭代器的適用范圍及用法實(shí)例,需要的朋友可以參考下

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

一般來(lái)說(shuō),迭代器模式的需求來(lái)自:需要對(duì)一些集合進(jìn)行迭代,而迭代的方式可能有很多種。

說(shuō)到迭代,動(dòng)作大致包括設(shè)置第一個(gè)位置,獲取下一個(gè)位置元素,判斷是否迭代結(jié)束,獲取當(dāng)前位置元素,大致就這么些。把這些迭代動(dòng)作封裝到一個(gè)接口中。

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

在現(xiàn)實(shí)場(chǎng)景中,迭代的方式可能有很多種,先實(shí)現(xiàn)一種迭代方式,實(shí)現(xiàn)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類內(nèi)部維護(hù)這一個(gè)集合,而這個(gè)集合是通過(guò)構(gòu)造函數(shù)賦值的,否則的話,迭代器就沒(méi)活干了。 

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

只要一個(gè)類維護(hù)著集合,就可能用到以上實(shí)現(xiàn)IIterator接口的某種具體迭代器。所有需要迭代器的類都有一個(gè)共同的動(dòng)作,就是創(chuàng)建一個(gè)迭代器。先把創(chuàng)建迭代器的動(dòng)作抽象成接口。

public interface IManagement
{
    IIterator CreateIterator();
}

假設(shè)有一個(gè)管理用戶集合的類,使用以上的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);
    }
}

假設(shè)有一個(gè)管理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創(chuàng)建各自的迭代器,然后使用迭代器把集合的所有元素打印出來(lái)。

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());
      }
    }
}

運(yùn)行結(jié)果如下圖所示:

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C#中委托的+=和-=深入研究

    C#中委托的+=和-=深入研究

    這篇文章主要介紹了C#中委托的+=和-=深入研究,本文深入研究+=和-=在執(zhí)行時(shí)都做了哪些事情,加深對(duì)C#委托的理解和使用,需要的朋友可以參考下
    2015-01-01
  • 詳解C#中Dictionary<TKey,TValue>的存儲(chǔ)結(jié)構(gòu)

    詳解C#中Dictionary<TKey,TValue>的存儲(chǔ)結(jié)構(gòu)

    無(wú)論是實(shí)際的項(xiàng)目中,還是在我們學(xué)習(xí)的過(guò)程中,都會(huì)重點(diǎn)的應(yīng)用到Dictionary<TKey,?TValue>這個(gè)存儲(chǔ)類型,所以本文就來(lái)為大家介紹一下這一存儲(chǔ)結(jié)構(gòu)的相關(guān)知識(shí),希望對(duì)大家有所幫助
    2023-11-11
  • Unity?UGUI的TouchInputModule觸摸輸入模塊組件介紹使用示例

    Unity?UGUI的TouchInputModule觸摸輸入模塊組件介紹使用示例

    這篇文章主要為大家介紹了Unity?UGUI的TouchInputModule觸摸輸入模塊組件介紹使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C# 爬蟲簡(jiǎn)單教程

    C# 爬蟲簡(jiǎn)單教程

    這篇文章主要介紹了C# 爬蟲的簡(jiǎn)單教程,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#中使用Cache框架快速實(shí)現(xiàn)Cache操作

    C#中使用Cache框架快速實(shí)現(xiàn)Cache操作

    這篇文章介紹了C#中使用Cache框架快速實(shí)現(xiàn)Cache操作的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#實(shí)現(xiàn)合并多個(gè)word文檔的方法

    C#實(shí)現(xiàn)合并多個(gè)word文檔的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)合并多個(gè)word文檔的方法,是C#針對(duì)Word文檔操作的一個(gè)非常重要的技巧,需要的朋友可以參考下
    2014-09-09
  • C#如何創(chuàng)建自定義特性

    C#如何創(chuàng)建自定義特性

    這篇文章主要介紹了C#如何創(chuàng)建自定義特性,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 詳解C#如何實(shí)現(xiàn)一個(gè)安全的事件訂閱器

    詳解C#如何實(shí)現(xiàn)一個(gè)安全的事件訂閱器

    事件訂閱器是一個(gè)對(duì)象,它訂閱(或監(jiān)聽)某個(gè)事件,并在事件發(fā)生時(shí)執(zhí)行相應(yīng)的操作,本文主要介紹了C#實(shí)現(xiàn)一個(gè)安全的事件訂閱器的相關(guān)知識(shí),感興趣的可以了解下
    2024-01-01
  • C#實(shí)現(xiàn)獲取鼠標(biāo)句柄的方法

    C#實(shí)現(xiàn)獲取鼠標(biāo)句柄的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)獲取鼠標(biāo)句柄的方法,詳細(xì)的講述了實(shí)現(xiàn)獲取鼠標(biāo)句柄的具體步驟及實(shí)現(xiàn)方法,并附有完整的實(shí)例源碼供大家參考,需要的朋友可以參考下
    2014-09-09
  • C#中時(shí)間的幾種格式轉(zhuǎn)換方法

    C#中時(shí)間的幾種格式轉(zhuǎn)換方法

    有時(shí)候我們要對(duì)C#時(shí)間進(jìn)行轉(zhuǎn)換,達(dá)到不同的顯示效果,這里簡(jiǎn)單介紹下,方便需要的朋友
    2013-09-09

最新評(píng)論

仙游县| 会宁县| 家居| 浦城县| 互助| 黔西县| 额济纳旗| 敦煌市| 万载县| 夏河县| 许昌市| 宣武区| 神农架林区| 通渭县| 东乡族自治县| 齐河县| 丁青县| 封丘县| 万州区| 泾源县| 格尔木市| 黔西| 杨浦区| 五莲县| 云阳县| 汉川市| 蓝山县| 邻水| 阳春市| 璧山县| 昌乐县| 汝城县| 中方县| 延寿县| 云和县| 太仆寺旗| 福清市| 海城市| 沙湾县| 松滋市| 苏州市|