在所有關於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中不能含有模板,所以才不得已以介面繼承實現。這樣效果也不錯 一.先看看事件介面定義和實現 上面...