事件和索引指示器
事件為類和類的例項提供了向外界傳送通知的能力,而索引指示器則可以像陣列那樣對對像
進行索引訪問.
事件形像地說,事件(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...