.NET基础之集合

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

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

 

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

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

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;
        }
    }
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。