從發布者和訂閱者來看事件

2021-07-26 12:09:47 字數 1497 閱讀 6634

寫乙個事件**,只需要記住5個部分即可,如圖所示:

1.宣告委託:事件和事件處理程式必須有共同的簽名和返回型別,它們通過委託型別進行描述。

2.宣告事件:發布者類必須宣告乙個訂閱者類可以註冊的事件成員。

3.觸發事件:發布者類中觸發事件,便會呼叫註冊在事件上的所有事件處理程式。

4.註冊事件:訂閱者必須訂閱事件才能在事件被觸發時得到通知。

5.處理事件:訂閱者會在事件發生後執行相應的處理程式。

一、貓和老鼠的例子(不傳遞資料)

**如下:

using system;

namespace 練習專用

}//訂閱者類-老鼠

class mouse

//處理事件,事件發生後的處理程式

二、貓和老鼠的例子(傳遞資料)可以使用system命名空間提供的eventhandler委託型別,所以不需要自己定義委託型別了,它是這麼定義的:

public delegate void eventhandler(object sender, eventargs e);

//第乙個引數用來儲存觸發事件的物件的引用。由於是object類,所以可以匹配任何型別的例項

//第二個引數用來儲存狀態資訊,指明什麼型別適用於該應用程式

為了向事件處理程式的第二個引數傳入資料,需要宣告乙個派生自eventargs的自定義類來儲存需要傳入的資料。

**如下:

using system;

namespace 練習專用

}//發布者類-貓

class cat

//建構函式,給貓弄個名字

public cat(string name)

//宣告事件,使用自定義類的泛型委託

public static event eventhandlercatcryevent;

//在貓叫的方法中觸發事件

public void cry()

}//訂閱者類-老鼠

class mouse

//處理事件,事件發生後的處理程式

void run(object sender, cryeventargs e)

else

,老鼠不用跑了。。。", e.catname);}}

發布者 訂閱者模型

發布者和訂閱者模型是軟體架構中的訊息模式。1.第一種是1 n,乙個發布者對應多個訂閱者。例如匯率和rss 2.第二種是n 1,多個發布者對應乙個訂閱者。例如收集狀態,歷史記錄和資料。3.第三種是1 1,特定發布者對應特定訂閱者。例如 4.第四種是n n,多個發布者對應多個訂閱者。例如微博的話題。而在...

(十三)ROS發布者和訂閱者

參考 本文實現發布者和訂閱者,發布者發布資訊,資訊的內容是編號,訂閱者訂閱發布者訊息,並將解析出來的編號儲存為檔案 直接上 新建發布者節點 include ros ros.h include std msgs string.h include int main int argc,char argv ...

建立簡單的發布者和訂閱者

roscd cd src touch talker.cpp include 匯入ros系統包含核心公共檔案 include 匯入std msgs string訊息標頭檔案,這個由std msgs包的string.msg自動生成 include int main int argc,char ar re...