c 中的事件

2022-01-23 02:34:16 字數 986 閱讀 7976

1、c#事件本質就是對訊息的封裝,用作物件之間的通訊;傳送方叫事件傳送器,接收方叫事件接收器;

2、傳送器不知道接收器的任何情況,但接收器有乙個事件處理程式來處理這個事件(當事件發生時);那麼傳送器和接收器之間如何進行通訊呢?用事件,用委託,簡單地來理解把事件理解成訊息即可。

先定義個委託,要使用的事件處理程式的簽名(也就是函式型別,返回值,引數個數,引數型別等等)由這個委託定義,委託本質就是個函式指標,指向指令所在的記憶體區域。

事件+=委託(事件處理程式)

把這個事件委託給了事件處理程式

至於事件處理程式的簽名是怎麼樣的,由委託給出,eventhandler委託是由系統所定義的。

所以總的流程,是這樣的:

1)先定義個委託,不一定在接收器的內部,在可見域即可

2)在傳送器類物件的內部來進行註冊,進行委託,把事件和事件處理程式關聯起來(事件處理程式可以是靜態的,直接用;可以是非靜態的,用例項化物件才能呼叫,因為這種成員函式是屬於類例項物件的,只有例項化的物件呼叫才有意義,也可以理解成為,例項化物件之後才編譯出這種函式的指令**放在記憶體中,才能有效引用,這種是否和靜態函式一樣是否預先編譯取決於編譯器及系統的綜合考量設計),在接收器方面,給出事件處理程式的實現。

3、4、可給乙個事件新增多個事件處理程式,仍類似於多播委託,多個事件處理程式的順序是不一定的,所以就不能編寫事件處理程式之間互相有順序依賴的程式

5、一種簡化寫法,不必給出事件處理程式(訊息處理函式),在事件委託給事件處理程式處,直接用入表示式給出事件處理程式的**塊

6、事件定義的時候,其語法形式需要指出所用的委託(一種類型別,一種函式指標的型別,帶有簽名檢查,返回值,引數型別,引數個數等等),一般使用系統內建的委託,所以就不用單獨給出了;

委託的引數用的是規定好的形式,void返回型別,兩個引數,乙個引數object sender,乙個引數是有關事件的其他有用資訊的類物件,可以是任意類型別,但是必須派生於eventargs類(派生於的乙個基類,為了多型擴充套件,可以使用任何未知型別,用一定義好的函式格式)

C 中的事件

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

c 中的事件

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

C 中的事件

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