委托和事件(三)--事件详解
来源:互联网 发布:淘宝卖家不发货 差评 编辑:程序博客网 时间:2024/05/12 10:40
谈到事件,不得不牵扯到两个角色
事件发行者(Publisher):一个事件的发行者,也称作是发送者(sender),其实就是个对象,这个对象会自行维护本身的状态信息,当本身状态信息变动时,便触发一个事件,并通知说有的事件订阅者。
事件订阅者(Subscriber):对事件感兴趣的对象,也称为Receiver,可以注册感兴趣的事件,在事件发行者触发一个事件后,会自动执行这段代码。
//发布者(Publiser)public class Publisher
{
//声明一个出版的委托
public delegate void PublishEventHander();
//在委托的机制下我们建立以个出版事件
public event PublishEventHander OnPublish;
//事件必须要在方法里去触发,出版社发布新书方法
public void issue()
{
//如果有人注册了这个事件,也就是这个事件不是空
if (OnPublish != null)
{
Console.WriteLine("最新一期的《火影忍者》今天出版哦!");
OnPublish();
}
}
}
public class MrMing
{
//对事件感兴趣的事情,这里指对出版社的书感兴趣
public static void Receive()
{
Console.WriteLine("嘎嘎,我已经收到最新一期的《火影忍者》啦!!");
}
}
public class MrZhang
{
//对事件感兴趣的事情
public static void Receive()
{
Console.WriteLine("幼稚,这么大了,还看《火影忍者》,SB小明!");
}
}
{
public static void Main(string[] args)
{
//实例化一个出版社
Publisher publisher = new Publisher();
//给这个出火影忍者的事件注册感兴趣的订阅者,此例中是小明
publisher.OnPublish += new Publisher.PublishEventHander(MrMing.Receive);
//另一种事件注册方式
//publisher.OnPublish += MrMing.Receive;
//发布者在这里触发出版火影忍者的事件
publisher.issue();
Console.ReadKey();
}
}
输出为:
最新一期的《火影忍者》今天出版哦~
嘎嘎,我已经收到最新一期的《火影忍者》啦!!
如果童靴们,从上到下仔细看一边的话,我想应该知道什么是发布者,什么是订阅者了吧,那至于事件呢
我们先看这句
publisher.OnPublish += new Publisher.PublishEventHander(MrMing.Receive);
这就是小明向出版社订阅他喜欢看的火影忍者,小张没有订阅所以小张没有收到书,
我们再仔细看看这个赋值语句,是不是似曾相识过呢?是的就是我们在上一讲,在讲委托声明的时候,简直就是一个眸子里刻出来的嘛
委托赋值:
BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);
所以,大家不要对事件有什么好怕的,其实事件的本质就是一个委托链,
我们看一下事件的声明:
//声明一个出版的委托
public delegate void PublishEventHander();
//在委托的机制下我们建立以个出版事件
public event PublishEventHander OnPublish;
在我们使用事件的时候,必须要声明对应的委托,而触发事件,其实就是在使用委托链。
- 委托和事件(三)--事件详解
- 委托和事件详解
- 详解事件和委托
- 委托和事件(三)
- C#委托和事件详解
- C#委托和事件详解
- C#委托和事件详解
- C#委托和事件详解
- C#委托和事件详解
- 委托和事件(二)--委托详解
- C#中的委托和事件(三)
- C#中的委托和事件(三)
- c#关于委托和事件(三)
- (三)C#之委托和事件
- 委托和事件入门(三)自定义控件事件
- 【菜鸟学c#】委托和事件(三、标准事件)
- C# 中的委托和事件详解
- C# 中的委托和事件详解
- 1059. C语言竞赛(20)
- 流量分发与流量导入
- 解决Pycharm无法导入包问题 Unresolved reference
- 网页跳转慢,显示加载中。。。。
- The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=403, text=\"ACCESS_RE
- 委托和事件(三)--事件详解
- java的System.getProperty()方法可以获取的值
- not found for architecture arm64
- 在粒子滤波中用到的两个重要的贝叶斯公式
- 解析gets、fgtes、scanf三者的区别
- 2,HTK学习_基于HTK语音工具包进行孤立词识别的使用教程
- JavaMail发送qq邮件
- 一些很棒的游戏推荐
- 高阶函数及闭包