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#法式設計有所贊助。