zoukankan      html  css  js  c++  java
  • C#自定义集合类(一)

    .NET中提供了一种称为集合的类型,类似于数组,将一组类型化对象组合在一起,可通过遍历获取其中的每一个元素

    自定义集合需要通过实现System.Collections命名空间提供的集合接口实现,常用接口有:

    • ICollection:定义所有非泛型集合的大小,枚举数和同步方法
    • IComparer:公开一种比较两个对象的方法
    • IDictionary:表示键/值对的非通用集合
    • IDictionaryEnumerator:枚举非泛型字典的元素
    • IEnumerable:公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代
    • IEnumerator:支持对非泛型集合的简单迭代
    • IList:表示可按照索引单独访问的对象非泛型集合

    以继承IEnumerable为例,继承该接口时需要实现该接口的方法,IEnumerable GetEnumerator()

    在实现该IEnumerable的同时,需要实现 IEnumerator接口,该接口有3个成员,分别是:

    Object Current{get;}

    bool MoveNext();

    void Reset();

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        public class Goods
        {
            public String Code { get; set; }
            public String Name { get; set; }
            public Goods(String code, String name)
            {
                this.Code = code;
                this.Name = name;
            }
        }
    
        public class JHClass : IEnumerable, IEnumerator
        {
            private Goods[] _goods;
            public JHClass(Goods[] gArray)
            {
                this._goods = new Goods[gArray.Length];
                for (int i = 0; i < gArray.Length; i++)
                {
                    this._goods[i] = gArray[i];
                }
            }
    
            //实现IEnumerable接口中的GetEnumerator方法
            IEnumerator IEnumerable.GetEnumerator()
            {
                return (IEnumerator)this;
            }
    
            int position = -1;
            object IEnumerator.Current
            {
                get
                {
                    return _goods[position];
                }
            }
    
            public bool MoveNext()
            {
                position++;
                return (position < _goods.Length);
            }
    
            public void Reset()
            {
                position = -1;
            }
        }
    
        class Program
        {
            static void Main()
            {
                Goods[] goodsArray =
                {
                    new Goods("1001","戴尔笔记本"),
                    new Goods("1002","华为笔记本"),
                    new Goods("1003","华硕笔记本")
                };
    
                JHClass jhList = new JHClass(goodsArray);
                foreach (Goods g in jhList)
                    Console.WriteLine(g.Code + " " + g.Name);
                Console.ReadLine();
    
            }
        }
    }
    View Code

  • 相关阅读:
    POJ 1386 判断欧拉回路
    POJ 1416 DFS
    POJ 1654 乱搞题?
    POJ 1703 带权并查集
    POJ 1442 Treap模板
    TYVJ 1941 BZOJ3038 上帝造题的七分钟2 并查集+树状数组
    POJ 2492 A Bug's Life 带权并查集
    AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)
    Binary Tree Traversal
    Weekly Contest 111-------->944. Delete Columns to Make Sorted
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12808788.html
Copyright © 2011-2022 走看看