C 事件機制

2022-03-21 03:32:14 字數 1195 閱讀 9361

在所有關於c#事件機制的介紹中,我更傾向於發布者/訂閱者(publisher/subscriber)這種描述。理解事件機制並不是一件容易的事情,它所涉及的思想值得我們好好去研究。

本文資源來自《c#與.net技術平台實戰演練》——中國青年出版社

談到事件,我們涉及到兩個角色:事件發布者(publisher)和事件訂閱者(scriber),也可以說是事件傳送者(sender)和事件接收者(receiver)的關係。舉個例子來說,市面上目前有許多雜誌,雜誌的種類也很多。而我只對其中的某些感興趣,那麼我就可以向雜誌發行商提出訂閱。之後,每當雜誌發行時,我就會收到我在雜誌發行商那兒訂閱的雜誌。在這個關係中,雜誌發行商就相當於事件發行者,而我就是事件訂閱者。每當雜誌發行時,就觸發了乙個發行事件。

用物件導向的語言解釋,這兩者的意義如下:

事件發行者(publisher)

它是乙個物件,且會維護自身的狀態資訊。每當狀態資訊發生變動時,便觸發乙個事件,並通知所有的事件訂閱者。對於雜誌發行商來說,每本雜誌都有自己的資訊在裡面,當雜誌發行時,我要通知訂閱該雜誌的人:雜誌已經發行啦,請注意查收!

事件接收者(receiver)

以下是.net事件處理機制的模型:

說明:可以註冊多個事件處理程式

下面給出乙個例子:

filewatch.cs內容:

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

namespacewindowsformseventtest}}

}form1.cs檔案內容如下:

usingsystem;

usingsystem.windows.forms;

namespacewindowsformseventtest

eventsource.onfilechange(e);

for(inti = 0; i < 500000000; ++i)

eventsource.onfilechange(e);

}publicvoidfilechangehandle(objectobj,myeventargse)

publicvoidfilechangehandle2(objectobj, myeventargse)}}

c 事件機制

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

C 的事件機制

c 的事件機制是基於委託實現的。實現乙個事件,要先定義乙個委託型別 class1 然後我們可以使用 和 註冊 移除事件 class1.event1 new mydelegate new myeventargs 在class中引發事件時最好這樣 class1 如果不想宣告自己的委託型別的話,可以使用s...

C 事件機制實現

事件是面向元件開發的必要特性之一,但c 不直接支援事件,沒關係,我自己實現了乙個,感覺很好用,分享給大家!最開始打算用函式指標模擬事件,但由於c 中成員函式指標不能和void 相互強轉,而且 typedef中不能含有模板,所以才不得已以介面繼承實現。這樣效果也不錯 一.先看看事件介面定義和實現 上面...