迭代器模式
迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
在C#中,可以通过IEnumerable和IEnumerator来实现这个模式。首先,我按照这两个接口完成了迭代器模式的实现:迭代器模式案例
在这个Example中,分别实现了这两个类
public class DinerMenu : IEnumerable
public class DinerMenuIterator : IEnumerator
其中,DinerMenu是需要可以被遍历的类,然后创建了DinerMenuIterator用于遍历DinerMenu。(具体实现过程不赘述,可以参考这篇文章:https://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html ,或者参考Head First中的迭代器模式章节)我们可以看到,实现起来还是比较繁琐的,尤其是如果项目中有许多类需要支持迭代器模式时。所以,在C#2中,提供了一种yield语法糖,来帮助我们化简这个实现。
使用yield实现的迭代器模式
public IEnumerator GetEnumerator()
{
for (int i = 0; i < m_numberOfItems; i++)
{
yield return m_menuItems[i];
}
}
只需要如上寥寥几行代码就可以实现了,是不是使用起来很方便?下面我们来分析一下这个语法糖的内部实现。依旧是先写一段尽量简洁的实验代码:
public IEnumerator GetEnumerator()
{
for (int i = 0; i < 3; i++)
{
yield return i;
}
}