C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式
更新時(shí)間:2022年05月04日 14:46:55 作者:.NET開(kāi)發(fā)菜鳥(niǎo)
這篇文章介紹了C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
一、事件參數(shù)
//事件參數(shù)
class CustomEventArgs:EventArgs
{
public CustomEventArgs( string message)
{
Message = message;
}
public string Message { get; set; }
}二、事件發(fā)布者
//事件發(fā)布者:事件的定義和調(diào)用,觸發(fā)事件也可以寫(xiě)在這里面
class Publisher
{
public event EventHandler<CustomEventArgs> CustomEvent;
public void DoSomething()
{
//調(diào)用之前可以在這里寫(xiě)一些其他的東西
//
OnCustomEvent(new CustomEventArgs("我是事件參數(shù)"));
}
//在受保護(hù)的虛方法中包裝事件的調(diào)用 ,這樣就允許派生類重寫(xiě)調(diào)用行為
protected virtual void OnCustomEvent(CustomEventArgs e)
{
CustomEvent?.Invoke(this, e);
}
}三、事件訂閱者
//事件訂閱者:事件方法編寫(xiě)和訂閱功能
class Subscriber
{
private readonly string Str;
////訂閱的動(dòng)作要在這里面了,所以才要傳過(guò)來(lái)發(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}");
}
}
//事件訂閱者:事件方法編寫(xiě)和訂閱功能
class Subscriber2
{
private readonly string Str;
////訂閱的動(dòng)作要在這里面了,所以才要傳過(guò)來(lái)發(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實(shí)現(xiàn)發(fā)布訂閱模式的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)利用泛型將DataSet轉(zhuǎn)為Model的方法
這篇文章主要介紹了C#實(shí)現(xiàn)利用泛型將DataSet轉(zhuǎn)為Model的方法,實(shí)例分析了C#泛型的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
winform中寫(xiě)app.config文件時(shí)調(diào)試情況下沒(méi)有改變的原因
讀取很簡(jiǎn)單基本都用過(guò) ConfigurationManager.AppSettings[""].ToString() 寫(xiě)config不是很常用2013-02-02
C#中Thread.CurrentThread的用法小結(jié)
本文主要介紹了C#中Thread.CurrentThread的用法小結(jié),通過(guò)Thread.CurrentThread可以訪問(wèn)和修改當(dāng)前線程的各種屬性和方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
VS中C#讀取app.config數(shù)據(jù)庫(kù)配置字符串的三種方法
這篇文章主要介紹了VS中C#讀取app.config數(shù)據(jù)庫(kù)配置字符串的三種方法,需要的朋友可以參考下2015-10-10
WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法,涉及WinForm窗口滾動(dòng)字幕設(shè)置的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08

