C 語言系列講座(8) 索引器與操作符過載

2021-03-31 08:56:28 字數 1501 閱讀 6984

索引器

索引器(indexer)是c#引入的乙個新的類成員,它使得物件可以像陣列那樣被方便、直觀地引用。索引器非常類似於前面講到的屬性,不同的是索引器可以有引數列表,但只能作用在例項物件上,而不能直接作用在類上。

索引器沒有像屬性和方法那樣的名字,關鍵字this清楚地表達了索引器引用物件的特徵。和屬性一樣,value關鍵字在set後的語句塊裡有引數傳遞的意義。實際上從編譯後的il中間語言**來看,上面這個索引器裡的set 和get函式被實現為get_item(int index)和set_item(int index, object value)兩個方法,所以不能再在實現索引器的類裡宣告實現這兩個方法,編譯器會對這樣的行為報錯。這樣隱含實現的方法同樣可以進行呼叫、繼承等操作,與**中實現的方法相同。

和方法一樣,索引器有5種訪問保護級別和4種繼承行為修飾,以及外部索引器。這些行為同方法沒有任何差別,這裡不再贅述。惟一不同的是索引器不能為靜態(static)。值得注意的是在覆蓋(override)實現索引器時,應該用base[e]來訪問父類的索引器。

和屬性的實現一樣,索引器的資料型別同時為get語句塊的返回型別和set語句塊中value關鍵字的型別。

索引器的引數列表也是值得注意的地方。「索引」的特徵使得索引器必須具備至少乙個引數,該引數位於this關鍵字之後的括號內。索引器的引數只能是傳值型別,不可以有ref(引用)和out(輸出)修飾。引數的資料型別可以是c#中的任何資料型別。c#根據不同的引數簽名來進行索引器的多型辨析。括號內的所有引數在get和set下都可以引用,而value關鍵字只能在set下作為傳遞引數。下面是乙個索引器的具體應用:

using system;

class bitarray

public int length

} public bool this[int index]

set

} }

class test {

static void main() {

bitarray bits=new bitarray(10);

for(int i=0;i<10;i++)

bits[i]=(i%2)==0;

for(int i=0;i」與「<」、「>=」與「<=」。需要注意的是兩個引數的型別不同,或雖然型別相同但順序不同都會導致同名操作符的過載。

轉換操作符為不同型別之間提供隱式轉換和顯式轉換,主要用於方法呼叫、轉型表達和賦值操作。轉換操作符對其引數型別(被轉換型別)和返回值型別**換型別)也有嚴格的要求。引數型別和返回值型別不能相同,且兩者之間必須至少有乙個和定義操作符的型別相同。轉換操作符必須定義在被轉換型別或轉換型別任何其中乙個裡面。不能對系統定義過的轉換操作進行重新定義,兩個型別也都不能是object或介面型別,兩者之間不能有直接或間接的繼承關係——這三種情況系統已經預設轉換。

實際上,對於屬性、索引器和操作符這些c#提供的介面操作,都是方法的某種形式的邏輯抽象包裝,它旨在提供乙個友好易用的介面,完全可以通過方法來實現它們實現的功能。理解了這樣的設計初衷,才會恰當、正確地用好這些操作,而不至於導致濫用和錯用。

c語言中自增操作符與自減操作符

初學c語言的朋友肯定對自增操作符和自減操作符感到頭疼,一下就討論一下自增操作符,自減操作符。在程式設計中遇到的問題最好就是遍個程式試試。include int main 終端輸出結果是 4 2,那麼可以說明c先自增成2,然後加法操作用的是自增後的值2。include int main 而這個程式只是...

C語言 操作符分類解析與使用

目錄 xwg今天就帶各位大佬來了解一波c語言的操作符。常見的操作符分別如下 算術操作符是我們最常用的操作符 注 移位操作符分為左移操作符和右移操作符,移位操作符的操作物件只能是整數,且所謂的移位是對於整數的二進位制位進行移位 左移操作符 www.cppcns.com 右移操作符 左移操作符 移位規則...

C語言程式設計 操作符介紹與使用方法

注意事項 1.除了 運算子之外,其他的幾個操作符可以作用於整數和浮點數 2.對於 操作符如果兩個操作符都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。3.操作符的兩個運算元必須為整數。返回的是整數之後餘數 左移操作符 移位規則 高位遺棄,低位補0 例如 3的二進位制位 000000000...