C#基于自定義事件EventArgs實現(xiàn)發(fā)布訂閱模式
更新時間:2022年05月04日 14:46:55 作者:.NET開發(fā)菜鳥
這篇文章介紹了C#基于自定義事件EventArgs實現(xiàn)發(fā)布訂閱模式的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、事件參數(shù)
//事件參數(shù) class CustomEventArgs:EventArgs { public CustomEventArgs( string message) { Message = message; } public string Message { get; set; } }
二、事件發(fā)布者
//事件發(fā)布者:事件的定義和調(diào)用,觸發(fā)事件也可以寫在這里面 class Publisher { public event EventHandler<CustomEventArgs> CustomEvent; public void DoSomething() { //調(diào)用之前可以在這里寫一些其他的東西 // OnCustomEvent(new CustomEventArgs("我是事件參數(shù)")); } //在受保護的虛方法中包裝事件的調(diào)用 ,這樣就允許派生類重寫調(diào)用行為 protected virtual void OnCustomEvent(CustomEventArgs e) { CustomEvent?.Invoke(this, e); } }
三、事件訂閱者
//事件訂閱者:事件方法編寫和訂閱功能 class Subscriber { private readonly string Str; ////訂閱的動作要在這里面了,所以才要傳過來發(fā)布者 public Subscriber( string str,Publisher publisher) { Str = str; //訂閱事件 publisher.CustomEvent += HanderCustomEvent; } private void HanderCustomEvent(object sender, CustomEventArgs e) { //在這里做想做的事件 Console.WriteLine($"發(fā)布者:{sender.GetType()},訂閱者:{Str},參數(shù)是:{e.Message}"); } } //事件訂閱者:事件方法編寫和訂閱功能 class Subscriber2 { private readonly string Str; ////訂閱的動作要在這里面了,所以才要傳過來發(fā)布者 public Subscriber2(string str, Publisher publisher) { Str = str; //訂閱事件 publisher.CustomEvent += HanderCustomEvent; } private void HanderCustomEvent(object sender, CustomEventArgs e) { //在這里做想做的事件 Console.WriteLine($"發(fā)布者:{sender.GetType()},訂閱者:{Str},參數(shù)是:{e.Message}"); } }
四、調(diào)用事件
static void Main(string[] args) { Publisher publisher = new Publisher(); Subscriber subscriber1 = new Subscriber("subscriber1", publisher); Subscriber2 subscriber2 = new Subscriber2("subscriber2", publisher); //調(diào)用引發(fā)事件的方法 publisher.DoSomething(); Console.ReadKey(); }
到此這篇關(guān)于C#基于自定義事件EventArgs實現(xiàn)發(fā)布訂閱模式的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實現(xiàn)的中國移動官網(wǎng)手機號碼采集器
這篇文章主要介紹了C#實現(xiàn)的中國移動官網(wǎng)手機號碼采集器,本文先是采集號碼入庫,同時給出了篩選各類靚號的SQL語句,需要的朋友可以參考下2014-10-10C#中的Task.WaitAll和Task.WaitAny方法介紹
這篇文章介紹了C#中的Task.WaitAll和Task.WaitAny方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04CAD2008+VS2008開發(fā)ObjectARX加載失敗問題(推薦)
這篇文章主要介紹了CAD2008+VS2008開發(fā)ObjectARX加載失敗問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04C#使用表達式樹(LambdaExpression)動態(tài)更新類的屬性值(示例代碼)
這篇文章主要介紹了C#使用表達式樹(LambdaExpression)動態(tài)更新類的屬性值,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01圖解如何使用C#創(chuàng)建Windows服務(wù)
本文主要介紹了圖解如何使用C#創(chuàng)建Windows服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07