C 中的事件

2021-04-12 18:51:06 字數 2446 閱讀 8124

目錄:

介紹委託和事件

宣告事件(定義事件)

註冊事件

實現事件

觸發事件

為事件增加「新增/刪除」方法

一 介紹委託和事件

事件是特殊化的委託,委託是事件的基礎,所以在介紹事件之前先介紹一下委託。

委託:使用委託可以將方法應用(不是方法)封裝在委託物件內,然後將委託物件傳遞給呼叫方法的**,這樣編譯的時候**就沒有必要知道呼叫哪個方法。通過使用委託程式能夠在執行時動態的呼叫不供的方法。

事件:事件是物件傳送的訊息,傳送訊號通知客戶發生了操作。這個操作可能是由滑鼠單擊引起的,也可能是由某些其他的程式邏輯觸發的。事件的傳送方不需要知道那個物件或者方法接收它引發的事件,傳送方只需知道在它和接收方之間存在的中介(deletgate)

二. 宣告事件(定義事件)

在gui圖形介面中的事件(單擊按鈕或者選擇選單等)是已經定義好的事件,所需要的就是註冊事件。我們也可以自己定義宣告事件,可以將自己定義的事件應用到程式的任何地方。事件和委託是分不開的,c# 中使用委託來宣告事件。

如果在類裡面宣告事件,那麼必須先宣告該事件的委託型別,也可以使用乙個事先已經宣告好的委託型別。

下面是乙個宣告事件的例子:

using system;

public delegate void menuhandler()//事先申明乙個委託,也可以在類的內部宣告委託型別

public class menuitem //宣告乙個選單項目的類

public void fird()

public string text //定義屬性

set }

} 程式首先定義個乙個叫做menuhandler的委託,然後定義了叫做 menuitem 的類,menuitem類包含了乙個menuselection 事件(選單被選擇事件),事件的委託型別是menuhandler。事件的宣告完成啦,下面開始註冊事件

三.註冊事件

這裡先講一下 publisher/subscriber(發布者/訂閱者)模式,因為事件就是從這個模式繼承下來的。乙個訊息的傳送者 (sender) 稱之為 publisher,而該訊息的接收者 (receiver),則稱之為subscriber,subscriber(訂閱者)在publisher(發布者)處註冊自己,publisher發生改變的時候,通知subscriber做適當的操作,很類似設計模式中的observer 。

在這裡我們認為註冊的程式就是訂閱者(subscriber)。事件相當於發布者(publisher),下面的程式表明了如何把訂閱器連線到發布器:

using system;

public class delegateandevents //定義個註冊事件的類 }

從註冊事件的那行**來看,事件就像是事件類的乙個字段(屬性),但是對它的訪問是很受限制的,只能通過:在該字段上撰寫新的委託(+=)或者從欄位(可能是復合字段)移除委託(-=)進行訪問,

移除註冊事件:delmenu.menuselelction-=new menuhandler(**. deletesite)

四.實現事件

這裡就要講到上個例子中的sitemanager類,它包含了事件需要實現的方法(addsite,deletesite),sitemanager類的方法一定要符合事件的委託型別和返回型別,在委託新增到事件前,該方法能夠以這個方式付給委託。

using system;

public class sitemanger //站點管理類

public void addsite() //方法要符合委託的型別

public void deletesite() //方法要符合委託的型別 }

sitemanger類的方法要符合委託型別,這樣他的方法可以很方便的當作事件的方法使用。

五. 觸發事件

當呼叫事件時就可以說時觸發了事件。事件是從定義它的類中觸發的

示例 using system;

public class menu //定義乙個選單類

public void run() //觸發事件的過程

mymenuitem.fire //呼叫fire 方法觸發事件,事件執行sitemanger類的方法

} 到此為止我就完成了整個事件的實現過程。

六.為事件增加「新增/刪除」方法

如果由大量的方法需要註冊到事件時,可以為為事件增加 add,remove 方法。通過訪問事件的「新增/刪除方法」來註冊方法

示例:

using sytem;

pulic delete ovid menuhandler(object sender,eventargs e); //示例1的變形

public class menuitem

remove }

} 出處:

c 中的事件

說到了委託,現在就來說說事件吧,其實事件就是一種特殊的委託。有事件,就會有對事件進行處理的方法,而事件和處理方法之間是怎麼聯絡起來的呢?委託就是他們中間的橋梁,事件發生時,委託會知道,然後將事件傳遞給處理方法,處理方法進行相應處理。比如,在winform中最常見的是按鈕的click事件,它是這樣委託...

C 中的事件

目錄 介紹委託和 事件宣告 事件 定義 事件 註冊事件 實現事件 觸發事件 為事件增加 新增 刪除 方法 一 介紹委託和 事件事件是特殊化的委託,委託是 事件的基礎,所以在介紹 事件之前先介紹一下委託。委託 使用委託可以將方法應用 不是方法 封裝在委託物件內,然後將委託物件傳遞給呼叫方法的 這樣編譯...

C 中的「事件」

c 中的 事件 是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。要在程式中使用自定義事件,需按以下步驟進行 1 宣告事件 要在...