.NET基础之集合

来源:互联网 发布:淘宝的大拿韩代敢买吗 编辑:程序博客网 时间:2024/05/23 00:59

集合可以说是数组的超集,集合可以维护对象数组,集合包含了更高级的功能。例如控制对其包含的对象的访问、搜索和排序等。数组是固定的,一旦我们创建好了数组,不能在现有数组的末尾添加新项,除非我们创建新的数组。

C#中的数组实现为System.Array类的实例,它们只是集合类中的一种,集合类的功能重要通过实现System.Collection名称空间中的接口而获得的。

 

System.Collection名称空间中的几个接口提供了基本的功能集合:

  • IEnumerable可以迭代集合中的项。这个接口中的唯一方法GetEnumerator()可以迭代集合中的各项。使用foreach结构的对象必须要实现这个方法
  • ICollection(继承与IEnumerable)可以获取集合中项的个数,并能把项复制到一个简单的数组类型中。ICollection中有CopyTo(System.Array array,int index)方法和Count属性
  • IList(继承于IEnumberable和ICollection)提供了集合的项列表,并可以访问这些项,以及其他一些与项列表有关的功能。IList
  • IDictionary(继承于IEnumerable和ICollection)类似于IList,但提供了通过键码值而不是索引访问的项列表。          IDictionary

System.Array类实现了IList,ICollection,IEnumerable,但不支持IList的一些高级功能。

 

如何自定义集合类

    Collection类有接口IEnumerable,ICollection和IList,可以使用其提供的List和InnerList两个受保护的属性,它们可以访问存储的对象本身。

有一个Animal类:

Public class Animal{    //类成员}

      实现它的集合:

复制代码
Public class Animals : CollectionBase{    public void Add(Animal newAnimal)    {        List.Add(newAnimal);    }    public void Remove(Animal oldAnimal)    {        List.Remove(oldAnimal);    }    public Animals()    {    }}
复制代码

如果要通过索引访问,就要添加索引符。添加索引符如下:

复制代码
public class Animals : CollectionBase{    ...    public Animal this[int animalIndex]    {        get        {            return (Animal)List[animalIndex];        }        set        {            List[animalIndex] = value;        }    }}
复制代码

自定义Dictionary,使可以通过关键字访问

和上一个集合的实现例子非常类似,但是还是有一定的差别。要实现IDictionary接口,所以我们可以继承DictionaryBase,具体细节如下:

复制代码
public class Animals : DictionaryBase{    public void Add(string newID, Animal newAnimal)    {        Dictionary.Add(newID, newAnimal);    }        public void Remove(string oldID)    {        Dictionary.Remove(oldID);    }        public Animals() {}    public Animal this[string animalID]    {        get        {            return (Animal)Dictionary[animalID];        }        set        {            Dictionary[animalID] = value;        }    }}
复制代码
0 0
原创粉丝点击