基于EventArgs发布者和订阅者
一、事件参数
//事件参数
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();
}
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/16045003.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!