C# 定义集合
下面讨论如何创建自己的强类型化的集合。一种方式是手动实现需要的方法,但这较费时间而且过程也非常复杂。我们还可以从一个类中派生自己的集合,例如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();
耍以这种方式通过索引来访问项,就需要使用索引符。
点击加载更多评论>>