位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 定義集合

提問人:劉團圓發(fā)布時間:2020-12-07

    下面討論如何創(chuàng)建自己的強類型化的集合。一種方式是手動實現(xiàn)需要的方法,但這較費時間而且過程也非常復雜。我們還可以從一個類中派生自己的集合,例如System.Collections.CollectionBase類,這個抽象類提供了集合類的大量實現(xiàn)代碼。這是推薦使用的方式。

    CollectionBase類有接口 IEnumerable、ICollection和IList,但只提供了一些必要的實現(xiàn)代碼,主要是IList的Clear()和RemoveAtO方法,以及ICollection的Count屬性。如果要使用提供的功能,就需要自己實現(xiàn)其他代碼。

    為便于完成任務,CollectionBase提供了兩個受保護的屬性,它們可以訪問所存儲的對象本身。我們可以使用List和InnerList,List可以通過IList接口訪問項,InnerList則是用于存儲項的ArrayList對象。

    例如,存儲Animal對象的集合類可以定義如下(稍后介紹較完整的實現(xiàn)代碼):

public class Animals : CollectionBase

{

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

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

    public Animals() {}

}

    其中,AddO和RemoveO方法己實現(xiàn)為強類型的方法,使用IList接口的標準AddO方法來訪問項。這些方法現(xiàn)在只用于處理Animal類或派生于Animal的類,而前面介紹的ArrayList實現(xiàn)代碼可處理任何對象。

   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();

耍以這種方式通過索引來訪問項,就需要使用索引符。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部