位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 定义集合

提问人:刘团圆发布时间:2020-12-07

    下面讨论如何创建自己的强类型化的集合。一种方式是手动实现需要的方法,但这较费时间而且过程也非常复杂。我们还可以从一个类中派生自己的集合,例如System.Collections.CollectionBase类,这个抽象类提供了集合类的大量实现代码。这是推荐使用的方式。

    CollectionBase类有接口 IEnumerable、ICollection和IList,但只提供了一些必要的实现代码,主要是IList的Clear()和RemoveAtO方法,以及ICollection的Count属性。如果要使用提供的功能,就需要自己实现其他代码。

    为便于完成任务,CollectionBase提供了两个受保护的属性,它们可以访问所存储的对象本身。我们可以使用List和InnerList,List可以通过IList接口访问项,InnerList则是用于存储项的ArrayList对象。

    例如,存储Animal对象的集合类可以定义如下(稍后介绍较完整的实现代码):

public class Animals : CollectionBase

{

    public void Add(Animal newAnimal) => List.Add(newAnimal); 

    public void Remove(Animal oldAnimal) => List.Remove(oldAnimal);

    public Animals() {}

}

    其中,AddO和RemoveO方法己实现为强类型的方法,使用IList接口的标准AddO方法来访问项。这些方法现在只用于处理Animal类或派生于Animal的类,而前面介绍的ArrayList实现代码可处理任何对象。

   CollectionBase类可以对派生的集合使用foreach语法。例如,可使用下面的代码:

WriteLine("Using custom collection class Animals:");

Animals animalCollection = new Animals(); 

animalCollection.Add(new Cow("Lea")); 

foreach (Animal myAnimal in animalCollection)

{

    WriteLine {$"New { myAnimal • ToString () } object added to custom " + $"collection, Name = {myAnimal.Name}");

}

但不能使用下面的代码:

animalCollection[0].Feed();

耍以这种方式通过索引来访问项,就需要使用索引符。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部