C 學習基礎 事件和索引指示器

2022-03-02 05:58:10 字數 3517 閱讀 9117

事件和索引指示器

事件為類和類的例項提供了向外界傳送通知的能力,而索引指示器則可以像陣列那樣對對像

進行索引訪問.

事件形像地說,事件(event)就是類或對像用來"發出通知"的成員.通過提供事件的控制代碼,客戶能

把事件和可執行程式碼聯絡在一起.

我們看下面這個列子

public delegate void eventhandler(object sender,eventargs e);

public class button:control

public void reset()

}在這個例子中,click是類button的乙個域,我們可以獲得它的值並進行修改,onclick方法用

於觸發click事件.

事件的宣告格式:

attributes  event-modifiers  event  type  variable-declarators;

attributes  event-modifiers  event  type  member-name

事件的修飾符event-modifiers可以是:

newpublic

protected

internal

private

static

virtual

sealed

override

abstract

static,virtual,override和abstract修飾符同一時刻只能出現乙個.事件的宣告中可以包

含事件訪問說明,或者依靠編譯自動提供乙個訪問器;它也可以省略事件訪問說明,一次定議

乙個或多個事件.

注意:使用atstract修飾符的抽像事件必須省略事件訪問說明,否則編譯器會提示錯誤.

事件所宣告的型別必須是乙個代表(delegate)型別,代表型別應該預先宣告,如上例中的

public delegate void eventhandler.

事件的預訂和撤消

在下面的例子中,我們宣告了乙個使用button類的登入對話方塊類.對話方塊類含有兩個按鈕:ok

和cancel按鈕.

public class logindialog:form

void okbuttonclick(object sender,eventargs e)

void cancelbuttonclick(object sender,eventargs e)

}在例子中使用了button類的兩個例項,事件的預訂是通過為事件加上右操作符"+="來實現的

:okbutton.click+=new eventhandler(okbuttonclick);

這樣,只要事件被觸發,方法就會被呼叫.

事件的撤消則採用左操作符"-=":

okbutton.click-=new eventhandler(okbuttonclick);

如果在類中宣告了事件,我們又希望像使用域的方式那樣使用事件,那麼這個事件就不能是

抽像的,也不能顯式地包含事件訪問宣告.滿足了這兩個條件後,在任何可以使用的場合都同

樣可以使用事件.

注意:對事件的觸發相當於呼叫事件所表示的原型-----delegate,所以對delegate型原型的呼叫

必須先經過檢查,確保delegate不是null型的.

事件訪問器

什麼情況下使用事件訪問宣告呢?答案是:如果每個事件的儲存開銷太大,我們就可以在類中

包含事件訪問宣告,按私有成員的規則存放事件控制代碼列表.

訪問器的宣告包括兩種:新增訪問器宣告(add-accessor-declaration)和刪除訪問器宣告

(remove-accessor-declaration).

訪問器宣告之後跟隨相關的執行程式碼的語句塊.在新增訪問器宣告後的程式碼需要執行新增事

件控制代碼的操作,在刪除訪問器宣告後的程式碼需要執行刪除事件控制代碼的操作.不管是哪種事件

訪問器,都對應相應的乙個方法,這個方法只有乙個事件型別的值引數,並且返回值為void.

在執行預訂操作時使用新增型訪問器,在執行撤消操作時使用刪除型訪問器.訪問器中實際

上還包含了乙個名為value的隱藏的引數,因而訪問器在使用區域性變數時不能再使用這個名

字.下面是乙個使用訪問器的例子:

class control:component

//add event handle associated with key

protected void addeventhandler(object key,delegate handler)

//remove event handler associated with key

protected void removeeventhandler(object key,delegate handler)

//mousedown event

public event mouseeventhandler mousedown

remove

}//mouseup event

public event mouseeventhandler mouseup

remove   }}

靜態事件

和域,方法等一樣,在宣告中使用了修飾符的事件稱之為靜態事件.靜態事件不與具體的例項

相關聯,因此不能在靜態事件的訪問器中引用this關鍵字.此外,在靜態事件宣告時又加上

virtual,abstract或override修飾符也都是不合法的.而對於非靜態的事件,我們可以在事

件的訪問器中使用this來指代類的例項.

索引指示器

索引指示器(indexer)使得可以像陣列那樣對對像使用下標.它為我們提供了通過索引方式

方便地訪問類的資料資訊的方法.

宣告格式:

attributes  indexer-modifiers  indexer-declarator 

索引指示器可以使用的修飾符indexer-modifier有:

newpublic

protected

internal

private

virtual

sealed

override

abstract

一對大括號{}之間是索引指示器的訪問宣告,使用get關鍵字和set關鍵字定議了對被索引的

元素的讀寫許可權.

例如,下面的例子用於列印出小姐人員的名單.

using system;

class team

set}

class test}}

在許多情況下,某些資料資訊應該是屬於類或類的例項所私有的,需要限制對這些資訊的訪

問.而我們有時又不希望這類資料對外界完全封閉.和屬性一樣,索引指示器為我們提供了控

制訪問許可權的另一種辦法.

下面是乙個運用索引指示器的乙個簡單例子.例子是乙個網路應用程式:根據網域名稱解析ip地

121.14.73.120

58.60.11.214

58.60.11.230

58.60.13.38

58.60.13.69

58.60.13.71

C 索引指示器

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

索引指示器

索引指示器 其目的包括 1.了解什麼是 索引指示器 2.如何實現 索引指示器 3.過載 索引指示器 4.了解如何實現多引數的 索引指示器 索引指示器並不難使用。它們的用法跟陣列相同。在乙個類內部,你可以按照你的意願來管理一組資料的集合。這些物件可以是類成員的有限集合,也可以是另外乙個陣列,或者是一些...

索引指示器

官方描述 索引器允許類或結構的例項就像陣列一樣進行索引。索引器形態類似於,不同之處在於它們的取值函式採用引數。這一功能在建立集合類的場合特別有用,而在其他某些情況下,比如處理大型檔案或者抽象有些資源等,能讓類具有類似陣列行為也是非常有用的。大致結構 this argument list getset...