C#自定义MyArrayList实现IEnumerable和IEnumerator
在C#编程中,自建类实现集合接口是一种常见的设计模式,特别是当需要定制或扩展现有集合的行为时。本文档主要介绍如何创建一个名为`MyArrayList`的自定义集合类,该类实现了`IEnumerable`和`IEnumerator`接口,这两个接口是.NET框架中的两个关键接口,用于处理可枚举的集合。 首先,`MyArrayList`类内部维护一个私有成员变量`obj`,这是一个object类型的数组,用于存储集合元素。另外,有两个计数器变量:`count`用于记录当前数组中的元素数量,初始化为0;`index`用于追踪遍历过程中的索引位置,初始值为-1,防止在首次访问时出现索引越界错误。 1. **Count属性**: `Count`属性是一个公开的只读属性,通过`get`访问器返回集合内的元素总数。当调用这个属性时,它会返回`count`的值,提供对集合大小的便捷访问。 2. **构造函数**: - `MyArrayList()` 是无参构造函数,用于初始化一个空的数组,`count`默认为0。 - `MyArrayList(int index)` 是带参数构造函数,接收一个整数作为参数,用于指定数组的初始长度,从而创建一个预先分配适当大小的数组。 3. **add(object o) 方法**: 此方法负责将一个新元素`o`添加到集合的末尾,并根据需要动态扩展数组。如果数组已满(`count`等于`obj.Length`),则会创建一个新的数组,将原数组中的元素复制到新数组,并将新元素插入。最后返回新元素在数组中的位置。 4. **IEnumerator 和 IEnumerable 接口实现**: - `MyArrayList`类通过继承`IEnumerable`接口,表明它可以被枚举(foreach循环可以遍历)。这意味着你可以使用`foreach`语句来迭代集合中的每个元素。 - 同时,由于实现了`IEnumerator`接口,意味着`MyArrayList`还提供了对单个元素的逐个访问,可以通过`IEnumerator`的`Current`属性和`MoveNext()`方法进行操作。这允许更底层的迭代控制,比如在特定条件满足时停止迭代。 通过这些实现,`MyArrayList`提供了一种灵活的方式来管理自定义的动态数组,允许添加、删除和获取元素,同时也支持标准的集合操作,如计数和清空。这种自定义集合类对于需要特殊功能或性能优化的应用场景非常有用,例如处理大量数据或需要复杂逻辑的元素管理。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data;
namespace MyConProject
{
/// <summary>
/// C#自建集合类MyArrayList实现集合接口IEnumerable, IEnumerator
/// 实现方法 inr add(object value),void Remove(object o), int Count, void Clear
/// </summary>
class MyArrayList : IEnumerable, IEnumerator
{
private object[] obj; //初始化保存集合元素的object数组
private int count = 0; //初始化数组个数0
private int index = -1;//初始化数组下标为-1,避免一开始下标移动出错
/// <summary>
/// 返回集合内元素的总个数
/// </summary>
public int Count
{
get { return count; }
}
/// <summary>
/// 无参构造,初始化数组个数0
/// </summary>
public MyArrayList()
obj = new object[count];
}
/// <summary>
/// 有参构造,指定初始化数组个数
/// </summary>
/// <param name="index"></param>
public MyArrayList(int index)
{
obj = new object[index];
}
/// <summary>
/// 新增功能,添加到数组末尾处,返回数组下标
/// </summary>
/// <param name="obj">要新增的对象</param>
/// <returns></returns>
public int add(object o)
{
object[] old = obj;
if (count >= obj.Length)
{
obj = new object[old.Length + 1];
for (int i = 0; i < old.Length; i++)
{
obj[i] = old[i];
}
}
obj[count] = o;
count++;
剩余6页未读,继续阅读
- 粉丝: 7
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦