C#自定义集合类(二)

在System.Collections 命名空间下,常用的集合类中,这两个类不属于集合,而是作为自定义集合类的基类。
内置的集合并不能满足所有的数据集合处理,c#为用户自定义集合提供条件。这两个基类如下:
CollectionBase:为强类型集合提供abstract 基类
DictionaryBase:为键/值对的强类型集合提供abstract基类。
集合类有键值对的字典集合和一般集合,这两个基类一个作为非字典集合的基类,一个作为字典集合的基类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Collections;

namespace ConsoleApplication1
{
    public class Food
    {
        public String Name { get; set; }
        public double Price { get; set; }
        public Food(String name, double price)
        {
            this.Name = name;
            this.Price = price;
        }
    }

    public class FoodList : CollectionBase
    {
        //重写父类的Add方法
        public virtual int Add(Food food)
        {
            return base.InnerList.Add(food);
        }

        public new void RemoveAt(int index)//父类中该方法不允许重写,需要使用new关键字屏蔽父类的RemoveAt方法
        {
            InnerList.RemoveAt(index);
        }

        public Food GetItem(int index)
        {
            return (Food)base.List[index];
        }
    }

    class Program
    {
        static void Main()
        {
            Food food1 = new Food("苹果", 2.1);
            Food food2 = new Food("香蕉", 3.1);
            Food food3 = new Food("橘子", 4.1);
            Food food4 = new Food("西红柿", 5.1);
            FoodList foodlist = new FoodList();
            foodlist.Add(food1);
            foodlist.Add(food2);
            foodlist.Add(food3);
            foodlist.Add(food4);
            for (int i = 0; i < foodlist.Count; i++)
            {
                Console.WriteLine("名称:{0} 价格:{1}", foodlist.GetItem(i).Name, foodlist.GetItem(i).Price);
            }

            Console.WriteLine("删除index=1的元素后:");
            foodlist.RemoveAt(1);
            for (int i = 0; i < foodlist.Count; i++)
            {
                Console.WriteLine("名称:{0} 价格:{1}", foodlist.GetItem(i).Name, foodlist.GetItem(i).Price);
            }

            Console.ReadLine();
        }
    }
}
View Code

原文地址:https://www.cnblogs.com/LuckyZLi/p/12808898.html