第十一章 事件

2022-07-16 09:03:10 字數 1300 閱讀 6899

目錄

11.1 設計公開事件的型別

11.2 編譯器如何實現事件

11.3 設計偵聽事件的型別

11.4 顯示實現事件

定義了事件成員的型別允許型別(或型別的例項)通知其他物件發生了特定的事件。

定義了事件成員的型別能提供以下功能:

方法能登記它對事件的關注

方法能登出它對事件的關注

事件發生時,登記了的方法將受到通知。

型別之所以能提供事件通知功能,是因為型別維護了乙個已登記方法的列表。事件發生後,型別將通知列表中所有已登記的方法。

clr事件模型以委託為基礎。委託是呼叫**方法的一種型別安全的方式。物件憑藉**方法接受它們訂閱的通知。

11.1.1 第一步:定義型別來容納所有需要傳送給事件通知接受者的附加資訊

事件引發時,引發事件的物件可能希望向接受事件通知的物件傳遞一些附加資訊。這些附加資訊需要封裝到它自己的類中。根據規定,這種類從eventargs派生。

11.1.2 第二步:定義事件成員

事件成員使用c#關鍵字event定義

11.1.3 第三步:定義負責引發事件的方法來通知事件的登記物件

安裝約定,類要定義乙個收保護的虛方法。引發事件時,類及其派生類中的**會呼叫該方法。

11.1.4 第四步:定義方法將輸入轉化為期望事件

類還必須有乙個方法獲取輸入並轉化為事件的引發。

編譯器編譯事件會轉換為3個構造:

第乙個構造時具有恰當委託型別的字段。該字段是對乙個委託列表的頭部的引用。事件發生時會通知這個列表中的委託。

第二個構造是乙個方法,允許其他物件登記對事件的關注。

第三個構造也是乙個方法,允許物件登出對事件的關注。

除了生成上述3個構造,編譯器還會在託管程式集的元資料中生成乙個事件定義記錄項。這個記錄項包含了一些標誌和基礎委託型別,還引用了add和remove訪問器方法。

1.登記對事件關注並呼叫方法 2.呼叫登出對事件的關注

為了高效率儲存事件委託,公開了事件的每個物件都要維護乙個集合(通常是字典)。集合將某種形式的事件標識作為鍵,將委託列表作為值。新物件構造時,這個集合是空白的。登記對乙個事件的關注時,會在集合中查詢事件的識別符號。如果事件標識已在其中,新委託就和這個事件的委託列表合併。如果事件標識不在集合中,就新增事件識別符號和委託。

物件需要引發事件時,會在集合中查詢事件識別符號。如果集合中沒有找到事件識別符號,表明還沒有任何物件登記對這個事件的關注,所以沒有任何委託需要**。如果事件識別符號在集合中,就呼叫與它關聯的委託列表。

第十一章 js事件

事件繫結和事件冒泡 題目 知識點 事件繫結 通過addeventlistener type,fn 進行事件繫結,下面為事件繫結函式簡單封裝 通用的事件繫結函式 function bindevent elem,type,fn const a document.getelementbyid link1 ...

modern c design 第十一章

本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...

第十一章3

第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...