C# 自定义集合类
.NET中提供了一种称为集合的类型,类似于数组,将一组类型化对象组合在一起,可通过遍历获取其中的每一个元素
本篇记录一个自定义集合的小实例。自定义集合需要通过实现System.Collections命名空间提供的集合接口实现,常用接口有:
ICollection:定义所有非泛型集合的大小,枚举数和同步方法
IComparer:公开一种比较两个对象的方法
IDictionary:表示键/值对的非通用集合
IDictionaryEnumerator:枚举非泛型字典的元素
IEnumerable:公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代
IEnumerator:支持对非泛型集合的简单迭代
IList:表示可按照索引单独访问的对象非泛型集合
今天的这个实例,以继承IEnumerable为例,继承该接口时需要实现该接口的方法,IEnumerable GetEnumerator()
在实现该IEnumerable的同时,需要实现 IEnumerator接口,该接口有3个成员,分别是:
Current属性,MoveNext方法和Reset方法,其定义如下:
Object Current{get;}
bool MoveNext();
void Reset();
案例实现如下:
1.定义一个商品类:作为集合类中的元素类
public class Goods
{
public string Code;
public string Name;
public Goods(string code,string name)
{
this.Code = code;
this.Name = name;
}
}
2.定义集合类,继承IEnumerable和IEnumerator接口
public class JHClass:IEnumerable,IEnumerator//定义集合类
{
private Goods[] _goods; //初始化Goods类型集合
public JHClass(Goods[]gArray)
{
_goods = new Goods[gArray.Length];
for (int i=;i<gArray.Length;i++)
{
_goods[i] = gArray[i];
}
}
/// <summary>
/// 实现IEnumerable接口中的GetEnumerator方法
/// </summary>
/// <returns></returns>
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)this;
} int position = -; //记录索引位置
// 实现IEnumerator接口中的Current方法
object IEnumerator.Current
{
get
{
return _goods[position];
}
} public bool MoveNext()
{
position++;
return (position < _goods.Length);
} public void Reset()
{
position = -; } }
3.功能实现,实现自定义集合的遍历,输出元素信息
static void Main(string[] args)
{
Goods[] goodsArray = new Goods[]
{
new Goods("T0001","小米电视机"),
new Goods("T0002","华为荣耀4X"),
new Goods("T0003","联想服务器"),
}; JHClass jhList = new JHClass(goodsArray);
foreach (Goods g in jhList) //遍历集合
{
Console.WriteLine(g.Code + " " + g.Name);
}
Console.ReadLine();
}
执行后输出:

C# 自定义集合类的更多相关文章
- JavaScript学习笔记-自定义集合类
//集合类Set( ES6标准才有的类,目前兼容性较差)//自定义集合类:extend = function (o,p){ //定义一个复制对象属性的类函数 for(var x in p){ o[x] ...
- 编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类
建议23:避免将List<T>作为自定义集合类的基类 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口.FCL结合类应该以组合的形式包含至自定义的集合 ...
- Java基础__Java中自定义集合类
Java基础__Java中集合类 传送门 自定义MyArrayList集合实现:增加数据.取数据.查看集合中数据个数方法 package com.Gary; public class MyArrayL ...
- [原创]WPF资源Binding自定义集合类。
简单介绍一下Wpf资源字典: 每个WPF界面元素都有一个名为Resource的属性,这个属性继承至FrameworkElement类,其类型为ResourceDictionary.ResourceDi ...
- C#集合 -- 自定义集合与代理
前面章节所讨论的集合都可以直接实例化,因此我们可以非常方便地使用这些集合类.但是如果你试图在集合添加或移除元素时添加控制,它们就不适用了.对于强类型集合,在某些情况下,你需要添加这样的控制: 添加或移 ...
- [c#基础]集合foreach的必要条件和自定义集合
引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...
- 自定义实现IEnumerable
Demo: http://files.cnblogs.com/files/georgeHeaven/Demo.IEnumerable.rar 一.使用场景 在开发过程中,经常需要使用foreach来循 ...
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...
- C# 通过IEnumberable接口和IEnumerator接口实现泛型和非泛型自定义集合类型foreach功能
IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环,如 ...
随机推荐
- 剑指offer-3:跳阶梯
三.跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析 青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n ...
- TableView 两种Style Plain and Group 区别以及进阶使用
一.UITableViewStylePlain 1.有多段时 段头停留(自带效果) 2.没有中间的间距和头部间距(要想有的重写UITableViewCell /UITableViewHeaderFoo ...
- Laravel配置全局公共函数的方法步骤
前言 在laravel项目开发中,经常使用到公共函数,那如何在laravel配置全局公共函数呢??下面话不多说了,来一起看看详细的介绍吧 方法如下 在Laravel项目中我们常常需要定义一些全局的公共 ...
- zabbix 内存溢出
tail -f /var/log/zabbix/zabbix_server_log ::165110.914 ================================ ::165110.914 ...
- Nagios-Nagios-Nagios系统监控(centos7部署源码)
一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...
- tar/gzip/zip文件打包、压缩命令
一.tar打包备份工具 1.命令功能 tar 将多个文件或目录打包在一起,可用通过调用gzip或zip实现压缩.解压的命令:tar不仅可以多多个文件进行打包,还可以对多个文件打包后进行压缩. 2.语法 ...
- 弹弹弹,弹走鱼尾纹的弹出菜单(vue)
前言 上一篇面试的总结,大家看的还行,因为量很大,错误在所难免,希望大家发现错误了可以告诉我一声,我的邮箱是236490794@qq.com,一个小前端的希望. 言归正传 我们老样子直接先上效果图再开 ...
- Shiro(一)
1 权限管理 1.1 什么是权限管理? 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问权限的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自 ...
- Eclipse中对一个项目进行复制粘贴为一个新项目
1:对目标项目执行右键,选择“Copy”,然后在空白处右键,选择“Paste”结果如下图: 2:右键新项目,点击Properties, 3:打开Navigator视图 4:打开.settings文件夹 ...
- 有关pip报错的问题
错误消息:“Fatal error in launcher: Unable to create process using '"' 解决办法: python3解决方案:python3 -m ...