.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# 自定义集合类的更多相关文章

  1. JavaScript学习笔记-自定义集合类

    //集合类Set( ES6标准才有的类,目前兼容性较差)//自定义集合类:extend = function (o,p){ //定义一个复制对象属性的类函数 for(var x in p){ o[x] ...

  2. 编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类

    建议23:避免将List<T>作为自定义集合类的基类 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口.FCL结合类应该以组合的形式包含至自定义的集合 ...

  3. Java基础__Java中自定义集合类

    Java基础__Java中集合类 传送门 自定义MyArrayList集合实现:增加数据.取数据.查看集合中数据个数方法 package com.Gary; public class MyArrayL ...

  4. [原创]WPF资源Binding自定义集合类。

    简单介绍一下Wpf资源字典: 每个WPF界面元素都有一个名为Resource的属性,这个属性继承至FrameworkElement类,其类型为ResourceDictionary.ResourceDi ...

  5. C#集合 -- 自定义集合与代理

    前面章节所讨论的集合都可以直接实例化,因此我们可以非常方便地使用这些集合类.但是如果你试图在集合添加或移除元素时添加控制,它们就不适用了.对于强类型集合,在某些情况下,你需要添加这样的控制: 添加或移 ...

  6. [c#基础]集合foreach的必要条件和自定义集合

    引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...

  7. 自定义实现IEnumerable

    Demo: http://files.cnblogs.com/files/georgeHeaven/Demo.IEnumerable.rar 一.使用场景 在开发过程中,经常需要使用foreach来循 ...

  8. C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能

    1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...

  9. C# 通过IEnumberable接口和IEnumerator接口实现泛型和非泛型自定义集合类型foreach功能

    IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环,如 ...

随机推荐

  1. Unicode字符集,utf8编码,base64编码简单了解

    Unicode字符集,utf8编码,base64编码简单了解 Unicode字符集,ASCII,GB2312编码集合等,类似于不同的字典,不同的字符的编码,类似于字典中的字在哪一个页哪一排. 当不同系 ...

  2. PHP实现无限极分类的两种方式

    无限极分类说简单点就是一个类可以分成一个分子类,然后一个子类又可以分另一个子类这样无限分下去,就是好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一个文件夹,PHP要实现无限极分类有两 ...

  3. tomcat+Redis

    Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发而成. Tomca ...

  4. C Make a Square Educational Codeforces Round 42 (Rated for Div. 2) (暴力枚举,字符串匹配)

    C. Make a Square time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...

  5. Java编程思想 第21章 并发

    这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...

  6. WPF 样式Style

    一:样式基础 如果我们的程序有三个这样的按键,一般我们会这样写 <StackPanel> <!--按键的背景色为Azure蔚蓝色背景色为Coral珊瑚色字体为Arial加粗字体大小为 ...

  7. 使用XML的方式实现账户的CRUD

    1 需求和技术要求 1.1 需求 实现账户的CRUD. 1.2 技术要求 使用Spring的IOC实现对象的管理. 使用QueryRunner作为持久层的解决方案. 使用C3p0作为数据源. 2 环境 ...

  8. Python 3标准库第四章

    第四章日期和时间-----------------    不同于int.float和str,Python没有包含对应日期和时间的原生类型,不过提供了3个相应的模块,可以采用多种表示来管理日期和时间值. ...

  9. MySQL报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' for column 'obj_value' at row 1

    1.插入MySQL表时,报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' ...

  10. 16.合并两个排序的链表(python)

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. class Solution: # 返回合并后列表 def Merge(self, pHead1 ...