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 在編寫 時,字段 方法 屬性都需要定...