国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

概述C#中的索引器

2024-07-21 02:22:12
字體:
來源:轉載
供稿:網友
c#語言一個最令人感興趣的地方就是類的索引器(indexer)。簡單說來,所謂索引器就是一類特殊的屬性,通過它們你就可以像引用數組一樣引用自己的類。顯然,這一功能在創建集合類的場合特別有用,而在其他某些情況下,比如處理大型文件或者抽象某些有限資源等,能讓類具有類似數組的行為當然也是非常有用的。本文就會引領你設置類來采用索引器。但是,首先讓我們概述下屬性這個概念以便了解些必要的背景知識。

屬性

假如你曾經用vb6編寫過程序,那么你應該很熟悉屬性方法才對,所謂屬性方法其實就是特殊的類成員,它實現了對私有類域的受控訪問。在c#語言中有兩種屬性方法,其一是get,通過它可以返回私有域的值,其二是set,通過它就可以設置私有域的值。比如說,以下面的代碼為例,其間創建了一個firstname屬性,由它控制對私有類成員firstname的訪問:

class person {
private string firstname;
public string firstname {
get {return firstname;}
set {firstname = value;}
}
}

屬性聲明可以如下編碼:
person p = new person();
p.firstname = "lamont";
console.writeline (p.firstname);

如你你所看到的那樣,屬性聲明倒更像是域聲明,只不過它還聲明了兩個特殊的成員,按照微軟的說法就是所謂的訪問函數(accessor)。當某一表達式的右邊調用屬性或者屬性用作其他子程序(或者函數)的參數時即會調用get訪問函數。反之,當表達式左邊調用屬性并且通過隱式傳遞value參數設置私有域值的情況下就會調用set訪問函數。你可以創建只讀屬性,方法是省略set訪問函數,這樣任何設置屬性的嘗試都會產生編譯錯誤。

采用索引器的益處
說了半天咱們轉到正題上來,那么為什么我要兜這個圈子呢?其實,這是因為類的索引器非常像屬性,從代碼上看也是這樣。以下是具有索引器的類示例,通過索引器會返回一個字符串:

class sample {
public string this [int index] {
get {return "you passed " + index; }
}
}

注意,這里的屬性名是this,意思是回引類的當前實例,參數列表包含在方括號而非括號之內。還有,這是一個只讀索引器。為了把它改成讀/寫類型,我又添加了一個set訪問函數。在定義索引器的時候,你不一定只采用一個參數。索引器參數可以采用任何類型,不過int是通常采用也是最為合理的類型。同一類中還可能擁有一個以上的索引器(重載)。

如上定義了sample類之后,我們就可以把索引器用作某種默認的屬性,如下所示:

sample s = new sample();
console.writeline(s[55]);

屬性和索引器
屬性和索引器之間有好些差別:

類的每一個屬性都必須擁有唯一的名稱,而類里定義的每一個索引器都必須擁有唯一的簽名(signature)或者參數列表(這樣就可以實現索引器重載)。
屬性可以是static(靜態的)而索引器則必須是實例成員。
為索引器定義的訪問函數可以訪問傳遞給索引器的參數,而屬性訪問函數則沒有參數。

接口
類似數組的行為常受到程序實現者的喜愛,所以你還可以為接口定義索引器,ilist和 idictionary集合接口都聲明了索引器以便訪問其存儲的項目。

在為接口聲明索引器的時候,記住聲明只是表示索引器的存在。你只需要提供恰當的訪問函數即可,不必包括范圍修飾符。以下代碼把索引器聲明為接口iimplementme的一部分:

interface iimplementme {
string this[int index]
{
get;
set;
}

相應實現的類則必須為iimplementme的索引器具體定義get和set訪問函數。

以上就是有關索引器的一些基本概述了。現在你應該對索引器在你的開發中所具有的作用有了較深入的了解。

上一篇:C#中的delegate和event

下一篇:c#事件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙洋县| 石家庄市| 留坝县| 江陵县| 广水市| 盐边县| 新干县| 济南市| 连云港市| 札达县| 郑州市| 邯郸县| 林周县| 囊谦县| 休宁县| 桐柏县| 龙井市| 凯里市| 乐至县| 玉树县| 岚皋县| 宝丰县| 古交市| 宁夏| 贺兰县| 苍梧县| 全南县| 墨竹工卡县| 梁山县| 马鞍山市| 和顺县| 茂名市| 扎鲁特旗| 凤凰县| 五台县| 宁化县| 定襄县| 若尔盖县| 开江县| 黄冈市| 克什克腾旗|