基於EventArgs釋出者和訂閱者
阿新 • • 發佈:2022-03-23
一、事件引數
//事件引數
class CustomEventArgs:EventArgs
{
public CustomEventArgs( string message)
{
Message = message;
}
public string Message { get; set; }
}
二、事件釋出者
//事件釋出者:事件的定義和呼叫,觸發事件也可以寫在這裡面 class Publisher { public event EventHandler<CustomEventArgs> CustomEvent; public void DoSomething() { //呼叫之前可以在這裡寫一些其他的東西 // OnCustomEvent(new CustomEventArgs("我是事件引數")); } //在受保護的虛方法中包裝事件的呼叫 ,這樣就允許派生類重寫呼叫行為 protected virtual void OnCustomEvent(CustomEventArgs e) { CustomEvent?.Invoke(this, e); } }
三、事件訂閱者
//事件訂閱者:事件方法編寫和訂閱功能 class Subscriber { private readonly string Str; ////訂閱的動作要在這裡面了,所以才要傳過來發布者 public Subscriber( string str,Publisher publisher) { Str = str; //訂閱事件 publisher.CustomEvent += HanderCustomEvent; } private void HanderCustomEvent(object sender, CustomEventArgs e) { //在這裡做想做的事件 Console.WriteLine($"釋出者:{sender.GetType()},訂閱者:{Str},引數是:{e.Message}"); } } //事件訂閱者:事件方法編寫和訂閱功能 class Subscriber2 { private readonly string Str; ////訂閱的動作要在這裡面了,所以才要傳過來發布者 public Subscriber2(string str, Publisher publisher) { Str = str; //訂閱事件 publisher.CustomEvent += HanderCustomEvent; } private void HanderCustomEvent(object sender, CustomEventArgs e) { //在這裡做想做的事件 Console.WriteLine($"釋出者:{sender.GetType()},訂閱者:{Str},引數是:{e.Message}"); } }
四、呼叫事件
static void Main(string[] args) { Publisher publisher = new Publisher(); Subscriber subscriber1 = new Subscriber("subscriber1", publisher); Subscriber2 subscriber2 = new Subscriber2("subscriber2", publisher); //呼叫引發事件的方法 publisher.DoSomething(); Console.ReadKey(); }