轉貼 C 事件機制初次接觸

2021-04-01 09:41:59 字數 2407 閱讀 1380

c#

是微軟出品的新一代程式語言是

vs.***

工具集中的主打語言,

c#的乙個重要特性之一就是支援「事件(

event

)」。在

c#中為乙個類新增事件支援是非常簡單的:

開啟vs.***

,新建乙個

,執行「專案」

->

「新增類」選單功能,新增乙個「

myclass

」類:using

system;

namespace}//

宣告事件

public

event eventhandler aevent

;//設定m_handler域儲存新的handler

}remove//

刪除訪問器

//置m_handler為null,該事件將不再被激發}}

public myclass()}}

然後在主檔案

class1.cs

中輸入如下**:

using

system;

namespace

//真正的事件處理函式

static

void myeventhandler()}}

執行,我們從程式的輸出結果中可以看出,

當我們在main函式中呼叫

obj.fireaevent();

方法後,我們的myeventhandler事件處理函式被呼叫,螢幕輸出 「this is a event!」。

下面我們結合該console程式的輸出結果分析一下這個myeventhandler是如何被呼叫的:

――――――――――――――――――――――――――――(1

)myhandler

的hashcode

為:10048139(2

)obj.aevent += myhandler

被呼叫(3)

aevent add

被呼叫,

value

的hashcode

為:10048139(4

)main

函式激發

obj的

aevent

事件!(5)

this is a event!(6

)obj.aevent -= myhandler

被呼叫(7)

aevent remove

被呼叫,

value

的hashcode

為:10048139(8

)main

函式試圖在撤消事件後激發

obj的

aevent

事件!---程式執行完畢!---

――――――――――――――――――――――――――――

首先,obj.aevent += myhandler

被呼叫後,

myhandler

被作為隱含的

value

引數傳遞給

myclass

中的事件

aevent

的add

訪問器,我們在該訪問器中設定

m_handler

成員變數為傳遞過來的

value

(通過hashcode

我們可以知道該引數和

main

函式中的

myhandler

為同一物件)即我們的

myhandler

(該**實際上指向我們的

myeventhandler

函式),當

main

函式呼叫

obj.fireevent()

時,obj

的m_handler

被呼叫,也就是我們的

myeventhandler

被呼叫。

obj.aevent -= myhandler

被呼叫時,

aevent

的remove

訪問器被呼叫,我們在這裡置

m_handler

為null

,撤消該事件,

main

函式再次

fireevent

時,由於

obj的

m_handler

為null

,所以直接返回到

main

函式中,事件處理函式不再被呼叫。

通過這個簡單的例子,我們可以從整體上了解c#的

event

機制的一般用法和淺層原理(深層的原理我還沒有弄明白

^_^)。可以看到,在

c#中事件機制是在語言級通過「函式**(

delegate

)」和「

event

」關鍵字被直接支援的,而在

c++等語言中是必須自己寫**實現的。

c 事件機制

c 事件機制比mfc 理解起來更為容易。記錄如下。理解c 的事件機制,需要理解事件的三方,事件產生方,事件接收方,和事件本身的資料。下面直接參照網上的乙個例子來說明這三方。假設乙個溫度監測器,監測加熱爐的溫度,當溫度到達100度的時候報警。在這個例子中,事件本身是監測溫度,事件發生方是加熱爐,事件接...

C 事件機制

在所有關於c 事件機制的介紹中,我更傾向於發布者 訂閱者 publisher subscriber 這種描述。理解事件機制並不是一件容易的事情,它所涉及的思想值得我們好好去研究。本文資源來自 c 與.net技術平台實戰演練 中國青年出版社 談到事件,我們涉及到兩個角色 事件發布者 publisher...

初次接觸C 和遊戲開發的技術總結

初次接觸c 和遊戲開發的技術總結 在學習c 時,一定要注意區分類和物件,類是相對抽象的存在,比如乙個班級的人,就輸入抽象的類,乙個班級裡某乙個人就是比較具體的物件。在編寫程式的時候要注意類的繼承關係 父類 parent 基類 base 子類 childclass 在編寫 時,字段 方法 屬性都需要定...