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

C# 定義集合

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

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

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

    為便于完成任務(wù),CollectionBase提供了兩個(gè)受保護(hù)的屬性,它們可以訪問所存儲(chǔ)的對(duì)象本身。我們可以使用List和InnerList,List可以通過IList接口訪問項(xiàng),InnerList則是用于存儲(chǔ)項(xiàng)的ArrayList對(duì)象。

    例如,存儲(chǔ)Animal對(duì)象的集合類可以定義如下(稍后介紹較完整的實(shí)現(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方法己實(shí)現(xiàn)為強(qiáng)類型的方法,使用IList接口的標(biāo)準(zhǔn)AddO方法來訪問項(xiàng)。這些方法現(xiàn)在只用于處理Animal類或派生于Animal的類,而前面介紹的ArrayList實(shí)現(xiàn)代碼可處理任何對(duì)象。

   CollectionBase類可以對(duì)派生的集合使用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();

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

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

相關(guān)視頻回答
回復(fù)(0)
返回頂部