重温设计模式 --- 迭代器模式
引言
迭代器模式是一种行为型设计模式,它允许按照特定顺序遍历集合对象的元素,同时不暴露集合的内部结构。这样做可以让客户端代码不依赖于集合对象的具体实现,从而提高代码的灵活性和可重用性。
在迭代器模式中,聚合对象将其遍历的职责委托给迭代器对象,而不是在聚合对象中实现遍历。
迭代器模式的优点是可以支持以不同的方式遍历一个聚合对象,而且可以隐藏遍历元素的内部细节。
在 C# 中,迭代器模式可以通过实现IEnumerable
和IEnumerator
接口来实现。其中 IEnumerable
接口定义了一个GetEnumerator
方法,返回一个实现了IEnumerator
接口的迭代器对象。IEnumerator
接口则定义了访问集合中元素的方法,包括Current
、MoveNext
和Reset
等。
迭代器实现
public class MyCollection : IEnumerable
{
private int[] items = new int[5] { 31, 12, 3, 64, 51 };
// 实现 IEnumerable 接口,返回一个枚举器
public IEnumerator GetEnumerator()
{
return new MyEnumerator(items);
}
// 自定义迭代器类
private class MyEnumerator : IEnumerator
{
private int[] items;
private int position = -1;
public MyEnumerator(int[] items)
{
this.items = items;
}
public object Current
{
get
{
if (position >= 0 && position < items.Length)
{
return items[position];
}
else
{
throw new InvalidOperationException();
}
}
}
public bool MoveNext()
{
position++;
return (position < items.Length);
}
public void Reset()
{
position = -1;
}
}
}
这样我们可以直接使用foreach
进行遍历:
MyCollection collection = new MyCollection();
foreach (int item in collection)
{
Console.WriteLine(item);
}
输出结果
31
12
3
64
51
结论
这就是迭代器模式的基本用法。它可以让我们轻松地遍历集合对象中的元素,而不必暴露集合的内部结构。此外,通过实现IEnumerable
和IEnumerator
接口,我们可以轻松地在 C# 中实现迭代器模式。
:::tip{title="提示"}
foreach
是c#语法糖,用来遍历实现了IEnumerable
接口的集合类。
foreach
循环的原理是通过调用集合类的GetEnumerator
方法,返回一个实现了IEnumerator
接口的迭代器对象,然后通过迭代器对象的MoveNext
方法,依次访问集合中的每个元素,直到集合中的所有元素都被访问完毕。
:::
作者: Niuery Daily
出处: https://www.cnblogs.com/pandefu/>
邮箱: defu_pan@163.com
关于作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控件库,多线程
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接,否则保留追究法律责任的权利。 如有问题, 可邮件咨询。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?