导航

(四)透过.Net框架找设计模式系列:迭代器模式

Posted on 2011-07-03 18:21  chicwoo  阅读(134)  评论(0)    收藏  举报

下面的语句我们非常熟悉:

IList<string> a = new List<string>();
	a.Add("大鸟");
	a.Add("菜鸟");
	a.Add("大鸭");
	a.Add("大嘴");

foreach (string item in a)
{
	Console.WriteLine("{0}",item);

}

上面是一个for each in 语句,微软官方对此定义

http://msdn.microsoft.com/zh-cn/library/ms177202(v=VS.100).aspx

for each (type identifier in expression) {
   statements
}
 

expression要求继承 IEnumerable, IEnumerable<T>或者包含方法GetEnumerator,返回的类型继承至 IEnumerator。

 

再看编译器做了对for each in做了怎么换,

IEnumerator<string> e = a.GetEnumerator();

While(e.MoveNext)
{
	Console.WriteLine("{0}",e.Current);
}
 
 
参见模式类图,

IList对应图中Aggregat容器类,List为实际的容器类

IEnumerator对应Iterator迭代器