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循环,如 ...
随机推荐
- StanfordNLP for JAVA demo
最近工作需要,研究学习 NLP ,但是 苦于官方文档太过纷繁,容易找不到重点,于是打算自己写一份学习线路 NLP 路线图 好博客韩小阳 斯坦福NLP公开课 统计学习方法 好博客 链接地址:https: ...
- 【抓包工具】使用Fiddler关于“由于目标计算机积极拒绝,无法连接。”的解决方案
今天使用Fiddler的时候遇到下面这个问题:在地址栏想打开个一般处理程序,出现连接本机失败的提示,如下图: 而这在我没打开Fiddler的时候是显示正常的. 查看Fiddler,在嗅探 -> ...
- ubuntu18.04 LTS上安装并使用nvm管理node版本
1. aaa nvm是一个非常不错的node版本管理器,类似于ruby的rvm. 其github地址为https://github.com/creationix/nvm. 此处介绍一下如何在ubunt ...
- laravel 添加筛选方式
protected function grid() { return Admin::grid(Client::class, function (Grid $grid) { $grid->id(' ...
- 页面中获取 iframe 中的值
3.页面中获取 iframe 中的值 var obj=document.getElementsByClassName(".ke-edit-iframe").contentWindo ...
- Rsync服务端部署流程
Rsync服务端部署流程 Rsync服务端部署流程: 一.rsync服务端配置流程 配置rsync配置文件/etc/rsyncd.conf 创建同步的本地目录/dingjian 并根据需要 ...
- Hadoop中配置环境后重启失效解决方法
Ubuntu下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户: 一:用于当前终端: 在当前终端中输入:export PATH=$PATH:<路径> 不过上面的 ...
- python出现SyntaxError: Non-ASCII character '\xe6' in file \的错误
出现这个问题的主要原因是因为python2的编码是ASCII码,文件中有中文的话就得使用utf8编码,只需要在文件的头部加上以下其中一种标注: 一.在文件头部添加如下注释码: # coding=< ...
- 正则获取a标签和a标签中的href地址
/(<\/?a.*?>)/ a标签 /<a\b.*?</a>/ 表式以"<a "(有空格) 开始 以"</a>" ...
- python 小题
python 小题:给定一个字符串,找出不含有重复字符的最长子串的长度.示例 1:输入: "abcabcbb"输出: 3 解释: 无重复字符的最长子串是 "abc&quo ...