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循环,如 ...
随机推荐
- vue单页应用中根据不同城市不同业务添加百度统计代码
问题描述: 我们知道一般的百度统计代码是添加在html的head里的:但是,因为目前项目是用vue开发的单页应用,所以在路由跳转之间不会刷新页面, 统计代码如果放在项目里的index.heml的hea ...
- java 过滤器filter使用案例
主要需要 过滤器类 和配置文件 1.过滤器类 SessionFilter package com.service; import javax.servlet.*; import javax.serv ...
- linux上安装Eclipse
之所以要在linux上安装Eclipse,是因为一开始我是通过Eclipse+MingW+Samba+GDBserver方式在Windows上远程操作,准备编译调试nginx源代码的,可是在编译调试过 ...
- PAT Basic 1091 N-自守数 (15 分)
如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数. 本题就请你编写程序判断一个给定的 ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 【转载】VMware下的Ubuntu用ifconfig不能显示ip地址的解决方案
转载于 http://blog.163.com/wjn_mcu/blog/static/23801601620146161062704/ 背景 在虚拟机下运行操作系统,尤其是Linux系统已经是非常常 ...
- UVa 10047 自行车 状态记录广搜
每个格子(x,y,drection,color) #include<iostream> #include<cstdio> #include<cstring> #in ...
- Mvc Excel导入加事务加导出
导出 public FileResult Input() { DataTable dt = new DataTable("dd"); using (SqlConnection co ...
- tensorboard_embedding
from tensorboardX import SummaryWriter import torchvision writer=SummaryWriter(log_dir="embeddi ...
- ubuntu 16.04 安装Opencv-3.2.0_GPU 与 opencv_contrib-3.2.0
1.准备依赖库 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config ...