c#事件的发布-订阅模型_C#事件发布设计模式
Windows程序最基本的原理是“以消息为基础,以事件驱动之(Message Based, Event Driven)”。程序的运行是要靠外部发生的事件来驱动的,也就是说程序需要不断等待任何可能的输入(以消息的形式描述的外部所发生的事件),然后做判断,然后再做适当的处理。接受并处理消息的主角是窗口,每一个窗口都应该有一个函数(方法)负责处理消息。如果窗口获得一个消息,则这个窗口函数必须判断消息的类别,然后决定处理的方式。这个函数就是所谓的窗口函数(Window Procedure,或称Window Function,该函数是一个回调函数),所以事件(Event)实际上就是一个回调(callback)的函数指针(Function Pointer),在C#中是用委托(Delegate)类型来实现的。
推荐的事件发布设计模式如下:
×设计EventArgs类,封装需要发送给事件接受者的数据
×定义一个委托类型,用于指定事件触发时被调用的方法原型
×定义一个事件成员(event关键字)
×定义一个触发事件的方法,负责通知事件的登记对象
×定义一个方法,转化程序收到的外部输入为事件格式,以产生能够触发事件的动作
完成订阅事件需要两步:
1.在事件订阅者的类型中定义事件处理方法(Event Handler)
2.向事件发行者订阅事件
具体“发布事件”和订阅事件的一个例子参考如下:
public struct QuitPerson //Information Carrier
{
public String Name;
public String Station;
}
public class CPeter //event distributor
{
public class CQuitHireEventArgs: EventArgs
{
public CQuitHireEventArgs(QuitPerson aquitPerson)
{
this.quitPerson = aquitPerson;
}
public readonly QuitPerson quitPerson;
}
public delegate void QuitHireEventHandler(Object sender, CQuitHireEventArgs e);
public event QuitHireEventHandler OnQuitHire; //define event member
protected virtual void QuitHire(CQuitHireEventArgs e)
{
if(OnQuitHire != null) OnQuitHire(this, e);
} //event notify register
public void setOnQuitHire(QuitPerson quitPerson)
{
CQuitHireEventArgs e = new CQuitHireEventArgs(quitPerson);
QuitHire(e);
} //action that trigger event
} //End of Event Distributer "CPeter"
//below are event receivers
public class CCeo
{
public CCeo(CPeter peter)
{
peter.OnQuitHire += new CPeter.QuitHireEventHandler(ReportCeoQH);
}
public void ReportCeoQH(Object sender, CPeter.CQuitHireEventArgs e)
{
Console.WriteLine("report to CEO:\n dismission person {0}, station {1}\n", e.quitPerson.Name, e.quitPerson.station);
}
}
public class CHRManager
{
public CHRManager(CPeter peter)
{
peter.OnQuitHire += new CPeter.QuitHIreEventHandler(ReportHRMangerQH);
}
public void ReportHRmanagerQH(Object sender, CPeter.CQuitHireEventArgs e)
{
Console.WriteLine("report to HR:\n dismission person {0}, station {1}\n", e.quitPerson.Name, e.quitPerson.station);
}
}
//use example
Class CAppRun
{
[STAThread]
static void main(String[] args)
{
QuitPerson quitPerson;
quitPerson.Name = "Wat, Kidsoul Jian Jun";
quitPerson.Station = "Project Manager";
CPeter peter = new CPeter();
CCeo ceo = new CCeo(peter);
CHRManager = new CHRManager(peter);
peter.SetOnQuitHire(quitPerson);
Console.Read();
}
}
c#事件的发布-订阅模型_C#事件发布设计模式相关推荐
- c#事件的发布-订阅模型_C#事件订阅发布实现原理详解
我们用一个简单的例子,来说明一下这种消息传递的机制. 有一家三口,妈妈负责做饭,爸爸和孩子负责吃...将这三个人,想象成三个类. 妈妈有一个方法,叫做"做饭".有一个事件,叫做&q ...
- c#事件的发布-订阅模型_C# 委托和事件 与 观察者模式(发布-订阅模式)讲解 by天命...
使用面向对象的思想 用c#控制台代码模拟猫抓老鼠 我们先来分析一下猫抓老鼠的过程 1.猫叫了 2.所有老鼠听到叫声,知道是哪只猫来了 3.老鼠们逃跑,边逃边喊:"xx猫来了,快跑啊!我是老鼠 ...
- vue发布订阅模式,发布订阅模型
1.什么是发布订阅模式 (又叫做观察者模式) 他定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都将得到通知. 2.发布订阅模型 1.发布者会给订阅者提供一个方法以便 ...
- kafka 发布订阅_在Kafka中发布订阅模型
kafka 发布订阅 这是第四个柱中的一系列关于同步客户端集成与异步系统( 1, 2, 3 ). 在这里,我们将尝试了解Kafka的工作方式,以便正确利用其发布-订阅实现. 卡夫卡概念 根据官方文件 ...
- 在Kafka中发布订阅模型
这是第四个柱中的一系列关于同步客户端集成与异步系统( 1, 2, 3 ). 在这里,我们将尝试了解Kafka的工作方式,以便正确利用其发布-订阅实现. 卡夫卡概念 根据官方文件 : Kafka是一种分 ...
- java实现rabbitmq发布/订阅模型(Publish/Subscribe queues), 生产者 消费者 交换机 消息队列
发布/订阅模型又称扇出模型,或者是广播模型,可以有多个消费者,每个消费者有自己的队列,每个队列都要绑定到交换机,生产者发送的消息只需要发送到交换机,再由交换机决定要发送到哪些队列,生产者无法自行决定. ...
- 分布式发布订阅模型网络的实现有哪些
大数据中常用的分布式发布订阅系统: 参考资料: WCF百科介绍 分布式"消息发布者-订阅者"模型的实现--WCF双工通讯特性的应用 [设计模式] 观察者模式(发布-订阅/Publi ...
- 3,ActiveMQ-入门(基于JMS发布订阅模型)
一.Pub/Sub-发布/订阅消息传递模型 在发布/订阅消息模型中,发布者发布一个消息,该消息通过topic传递给所有的客户端.在这种模型中,发布者和订阅者彼此不知道对方,是匿名的且可以动态发布和订阅 ...
- ros 单向通讯 talker,listener 发布订阅模型
原文链接: ros 单向通讯 talker,listener 发布订阅模型 上一篇: VirtualBox 端口转发(端口映射) 主机和虚拟机相互访问 下一篇: python 串口编程 发布订阅模型 ...
最新文章
- 考题:正则表达式 .*? 和 .* 有区别吗?
- 假笨说-从一起GC血案谈到反射原理
- mysql自动提交 dcl语句_MySQL基础:DCL语句总结
- Apache ab测试工具使用方法(无参、get传参、post传参)
- oracle 条件查询加排序,Java乔晓松-oracle的条件查询和排序查询
- 由更改密码引发的状况..(alter user xxx identified by password)
- 11.Excel数据分析-复合型饼图与漏斗图
- 飞鸽传书从天齐庙南门出来
- admin 系统被嵌套在第三方系统中的跨域异常
- 沈向洋、王海峰候选中国工程院院士!计算机领域7位入围增选
- Win32项目生成的程序exe图标显示异常的问题
- 关于c3p0连接池连接mysql数据库需要注意的几点
- HTML入门学习 -- HTML5 视频与音频
- oracle判断字符串以什么开头_sql语句判断字符串以什么什么开头
- 戏说面向对象程序设计
- HTML作业制作服装推广软文,盘点:服装推广软文写作技巧
- 计算机ppt用快捷键,【搞定PPT】高效重复快捷键F4
- 解决Ubuntu与Windows不能复制粘贴问题
- 【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
- 还在为图片转Excel而烦恼?6种转换方法让你3秒实现转换
热门文章
- 腾讯云mysql数据库迁移至CVM自建数据库
- 中国农民丰收节精神 2020(广东)功能性农业·农业大健康大会
- Angular模板引用变量(#var)
- 如何制作一张自动汇总表格,搞定所有Excel表格数据汇总问题
- pytorch JIT
- 类ChatGPT逐行代码解读(2/2):从零起步实现ChatLLaMA和ColossalChat
- CSP认证题解第一题
- 2021湖北天门高考理科成绩查询,2021年天门市高考状元名单资料,今年天门市高考状元多少分...
- 亚马逊批量注册账号流程
- wr720n改无线打印服务器,tplink如何关闭dhcp