C# 2012程序设计实践教程 (清华电脑学堂)
上QQ阅读APP看书,第一时间看更新

5.4 自定义集合类

在System.Collections命名空间下,有两个并不常用的集合CollectionBase和DictionaryBase,这两个集合通常被用来作为自定义集合的基类。

内置的集合并不能满足所有的数据集合处理,C#为用户自定义集合提供了条件。本节介绍自定义集合类。

5.4.1 自定义集合类概述

自定义集合类通常使用CollectionBase和DictionaryBase类作为基类,对这两个基类解释如下。

(1)CollectionBase:为强类型集合提供abstract基类。

(2)DictionaryBase:为键/值对的强类型集合提供abstract基类。

集合类有键/值对的字典集合和一般的集合,这两个基类一个作为非字典集合的基类,一个作为字典集合的基类。

以一般的集合类创建为例,首先要了解基类CollectionBase的成员,以便利用基类和重写基类。CollectionBase类的属性如表5-16所示,CollectionBase类的方法如表5-17所示。

表5-16 CollectionBase类的属性

表5-17 CollectionBase类的方法

5.4.2 实验指导——家电信息管理

本节自定义集合类,处理家电信息。首先创建家电信息类,接着自定义集合类实现数据的添加、删除和查询,继承CollectionBase并重写基类的方法,步骤如下。

(1)创建家电信息类appliances,有字段aname表示家电名称,字段aprice表示家电价格,并对应有两个属性。appliances类有两个构造函数,一个是没有参数的,一个是有着两个参数分别对两个字段进行初始化的,代码如下。

    public class appliances
    {
        public string aname;
        public double aprice;
        public appliances(){ }
        public appliances(string name, double price)
        {
            aname = name;
            aprice = price;
        }
        public string anames
        {
            get { return aname; }
            set { aname = value; }
        }
        public double aprices
        {
            get { return aprice; }
            set { aprice = value; }
        }
    }

(2)接下来创建集合类applianceslist,实现最基本的元素添加、元素查询和删除,继承基类CollectionBase并重写基类的方法。使用代码如下。

    public class applianceslist : CollectionBase
    {
        public virtual int Add(appliances app)  //重写父类的添加方法
        {
            return InnerList.Add(app);
        }
        public new void RemoveAt(int index)     
           //父类中该方法不允许覆盖,使用new关键字重写
        {
            InnerList.RemoveAt(index);
        }
        public appliances GetItem(int index)    //根据索引获得类对象
        {
            return (appliances)List[index];
        }
    }

(3)最后是上述两个类的实现,对家电信息类初始化4个示例,将这4个数据向集合中添加并输出集合中的数据;删除集合中索引为1的数据并输出集合中的现有数据,代码如下。

    appliances app1 = new appliances("热水器", 597);
    appliances app2 = new appliances("冰箱", 2345);
    appliances app3 = new appliances("电视", 1564);
    appliances app4 = new appliances("洗衣机", 998);
    applianceslist applist = new applianceslist();
    applist.Add(app1);
    applist.Add(app2);
    applist.Add(app3);
    applist.Add(app4);
    Console.WriteLine("*****************元素添加后:");
    for (int i = 0; i < applist.Count; i++)
    {
        Console.WriteLine("名称:{0} 价格:{1}", applist.GetItem(i).aname, 
            applist.GetItem(i).aprice);
    }
    Console.WriteLine("*****************删除索引为1的元素:");
    applist.RemoveAt(1);
    for (int i = 0; i < applist.Count; i++)
    {
        Console.WriteLine("名称:{0} 价格:{1}", applist.GetItem(i).aname, 
            applist.GetItem(i).aprice);
    }

上述代码的执行结果如图5-3所示。

图5-3 家电信息管理