C 教程第十一課 索引指示器

2021-06-06 23:00:15 字數 2921 閱讀 4374

本節課將介紹c#的索引指示器,其目的包括:

1.了解什麼是索引指示器

2.如何實現索引指示器

3.過載索引指示器

4.了解如何實現多引數的索引指示器

索引指示器並不難使用。它們的用法跟陣列相同。在乙個類內部,你可以按照你的意願來管理一組資料的集合。這些物件可以是類成員的有限集合,也可以是另外乙個陣列,或者是一些複雜的資料結構。不考慮類的內部實現,其資料可以通過使用索引指示器來獲得。如下是乙個例子:

1.清單 11-1. 索引指示器的例子:intindexer.cs

using system;

///

/// a ****** indexer example.

///

class intindexer

}public string this[int pos]

set}

static void main(string args)

]: ", i, myind[i]);}}

} 說明

1.清單 11-1演示了如何實現乙個索引指示器, intindexer類有個名為mydata的字串陣列,該陣列是私有成員,因而其外部成員是看不見的。該陣列是在建構函式中進行初始化的,該建構函式帶有乙個整型size引數,用來初始化mydata陣列,初始化時 把單詞"empty"作為每個陣列元素的值。

2.intindexer類的下一成員是索引指示器(indexer),由關鍵字this和方括號[int pos]標識出來。該成員帶有乙個位置引數pos。正如你已經猜測到,indexer的實現同屬性一樣。indexer有get 和set訪問操作,就同屬性中的用法一樣。索引指示器(indexer)返回乙個字串,在定義索引指示器時,string這個型別名標誌著其返回型別為字串型別。

3.main()方法完成如下事情:初始化乙個新的intindexer物件,新增一些值,並且列印出結果。其輸出結果如下:

indexer output

myind[0]: empty

myind[1]: empty

myind[2]: empty

myind[3]: another value

myind[4]: empty

myind[5]: any value

myind[6]: empty

myind[7]: empty

myind[8]: empty

myind[9]: some value

4.在不少程式語言中,通常都是使用整數作為下標來訪問作為陣列元素的,但c#的索引指示器不僅能夠做到這一點,而且還能夠更進一步。 定義索引指示器時,可以帶有多個引數,每個引數的型別可以不同。新增的引數由逗號隔開,同方法中的的參數列一樣。索引指示器的合法的引數型別包括:整型,列舉型別和字串。另外,索引指示器也可以被過載。在清單 11-2中,我們修改了前面的程式,以便用來過載索引指示器 ,從而可以接受不同型別的引數。

2.清單 11-2. 過載的索引指示器: ovrindexer.cs

using system;

///

/// implements overloaded indexers.

///

class ovrindexer

}public string this[int pos]

set}

public string this[string data]

}return count.tostring();

}set}}

}static void main(string args)

]: ", i, myind[i]);

}console.writeline("\nnumber of \"no value\" entries: ", myind["no value"]);}}

說明1.清單 11-2 演示了如何過載索引指示器。

帶有整型引數pos的第乙個索引指示器同清單11-1中的一樣,但是,該程式中有個帶有字串引數的新的索引指示器。對於這個新的索引指示器來說,其get操作返回的是同引數值data相匹配的成員的個數。 set操作把陣列中同引數值匹配的元素值該變為value值。

2.在清單11-2的main()方法中,演示了過載的索引指示器,它接受字串引數。

該過載的索引指示器呼叫了set操作,通過使用下列命令: myind["empty"] = "no value"; set操作把"no value"值賦給myind 類中所有的值為"empty"的成員。 myind類的每個成員都已經輸出之後,就把最後乙個資料輸出到控制台,該資料統計陣列成員值為"no value"的個數。 使用如下命令:myind["no value"],就可呼叫get操作。輸出結果如下:

indexer output

myind[0]: no value

myind[1]: no value

myind[2]: no value

myind[3]: another value

myind[4]: no value

myind[5]: any value

myind[6]: no value

myind[7]: no value

myind[8]: no value

myind[9]: some value

number of "no value" entries: 7

3.在清單 11-2中,兩個索引指示器共處在同乙個類中, 這是可以的,因為它們有不同的特徵。

乙個索引指示器的特徵是通過索引指示器參數列中的引數個數和型別表現出來的。類能夠辨別出其特徵,並呼叫相應的索引指示器。帶有多個引數的索引指示器可以用如下格式來實現:

public object this[int param1, ..., int paramn]

set} 小結

現在你已經了解了索引指示器是用來做什麼的,以及其用法。如同陣列的用法一樣,你可以建立索引指示器來訪問類的成員。本文也提到了索引指示器的過載和多引數索引指示器。

C 索引指示器

什麼是索引指示器?答 實現索引指示器 indexer 的類可以象陣列那樣使用其實例後的物件,但與陣列不同的是索引指示器的引數型別不僅限於int。簡單來說,其本質就是乙個含引數屬性 示例 using system using system.collections.generic using syste...

第十一課C 異常

異常的機制,格式如下 try 後面可以抓取很多和catch 編譯器會根據 引數來進行匹配 catch char s catch int a catch 表示剩下全部的情況 include include using namespace std classa voidk void voidkk voi...

VBScript教程 第十一課深入VBScript

vb教程 第十一課深入vbwww.cppcns.comscript 學習高階 vbscript 技術的最快程式設計客棧方法是閱讀大量的樣例。同時更好地理解物件模型有助於深入學習 vbscript。您可以從以下部分開始學習 程式設計客棧 activex程式設計客棧?控程式設計客棧件常見問題解答 頁面樣...