首页 > 代码库 > C#基础学习之事件的理解和应用
C#基础学习之事件的理解和应用
事件的使用和委托类似,也是分四步来实现:声明委托、定义事件、注册事件、调用事件
我们先看一下事件的定义
//定义委托public delegate void PublishEventHandler(string msg);//定义事件public event PublishEventHandler OnPublish;
事件注册和取消注册是用+=和-=方法名来完成的,如
publisher.OnPublish += method;
最后就可以调用事件了
OnPublish(msg);
我们同样使用一个例子来理解事件,学习事件是怎么使用的。
我们现在完成一个发布订阅的过程,由发布者发布消息,订阅者接受处理
看示例代码
发布者类:
public class Publisher { //定义委托 public delegate void PublishEventHandler(string msg); // public event PublishEventHandler OnPublish; public void SendMessage(string msg) { Console.WriteLine(string.Format("发布一个消息:{0}", msg)); // if (OnPublish != null) { //表示事件已注册 OnPublish(msg); } } }
订阅者类
public class Receiver { public void ReceiveMessage(string msg) { Console.WriteLine(string.Format("接收一个消息:{0}", msg)); }}
定义一个执行类,看事件如何调用
public class EventExecutor { public static void Run() { Publisher publisher = new Publisher(); string msg = "今天发工资了"; Receiver receiver = new Receiver(); //注册事件,订阅 publisher.OnPublish += receiver.ReceiveMessage; publisher.SendMessage(msg); } }
我们发现事件是依附于委托存在的,使用上和委托几乎相同,都是先声明再注册调用。
上面的例子我们直接使用委托实现也很简单,在Publisher类我们定义委托对象
//使用委托实现public PublishEventHandler publishEventHandler;
调用类中如下注册
//使用委托实现publisher.publishEventHandler = new Publisher.PublishEventHandler(receiver.ReceiveMessage);
那到底事件的存在意义是什么
事件其实是使用了委托链,类似对委托的一种封装,在注册事件时,我们只能通过+=Method的形式进行注册,而无法再像委托注册的时候直接给委托对象赋值。
其他的我也不太清楚哪些是委托不能完成的,还请大神指点
C#基础学习之事件的理解和应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。