C# 索引符
索引符(indexer)是一種特殊的屬性,可以把它添加到一個(gè)類中,以提供類似于數(shù)組的訪問(wèn)。實(shí)際上,可通過(guò)索引符提供更復(fù)雜的訪問(wèn),因?yàn)槲覀兛梢杂梅嚼ㄌ?hào)語(yǔ)法來(lái)定義和使用復(fù)雜的參數(shù)類型。它最常見(jiàn)的一個(gè)用法 是對(duì)項(xiàng)實(shí)現(xiàn)簡(jiǎn)單的數(shù)字索引。
可以在Animal對(duì)象的Animals集合中添加一個(gè)索引符,如下所示:
public class Animals : CollectionBase
{
...
public Animal this[int animallndex]
{
get { return {Animal)List[animalIndex] ; }
Set { List[animalIndex] = value; }
this關(guān)鍵字需要與方括號(hào)中的參數(shù)一起使用,除此以外,索引符與其他屬性十分類似。這個(gè)語(yǔ)法是合理的,因?yàn)樵谠L問(wèn)索引符時(shí),將使用對(duì)象名,后跟放在方括號(hào)中的索引參數(shù)(例如MyAnimals[0])。
這段代碼對(duì)List屬性使用了一個(gè)索引符(即在IList接口上,可以訪問(wèn)CollectkmBase中的ArrayList,ArrayList存儲(chǔ)了項(xiàng)):
return (Animal)List[animallndex];
這里需要進(jìn)行顯式數(shù)據(jù)類型轉(zhuǎn)換,因?yàn)镮List.List屬性返回一個(gè)System.Object對(duì)象。注意,我們?yōu)檫@個(gè)索引符定義了一個(gè)類型。使用該索引符訪問(wèn)某項(xiàng)時(shí),就可以得到這個(gè)類型。這種強(qiáng)類型化功能意味著,可以編寫(xiě)下述代碼:
animalCollection[0].Feed();
而不是:
((Animal)animalCollection[0]).Feed();
這是強(qiáng)類型化的定制集合的另一個(gè)方便特性。
點(diǎn)擊加載更多評(píng)論>>