C# 事件 解析
1.什么是事件,事件和委托什么关系?
事件?事件,就是,比如按一个按钮,弹出你好对话框,就是一个事件。
事件和委托? 事件就是委托的一种呀,委托可以理解为回调机制,回调函数。
2. 怎么理解C#事件,可以用一个例子说明?
C#事件,我们可以举个栗子。
邮件管理者可以接收各种各样的邮件,但邮件管理者不做邮件处理, 比如打印邮件是传真机做的事情。
那么邮件管理者可以接收到邮件后,通知打印机打印该邮件。这个过程就是C#事件处理的过程。
首先我们要清楚几个对象:
(1) 邮件是一个事件动作类型,这个事件上可以是定义什么人发邮件,接收邮件,内容是什么等等。
(2) 邮件管理者,是负责邮件接收的对象,是这个事件的直接关系人,但功能就是接收邮件,不对邮件进行其他处理。
(3) 打印机,打印机负责对 接收邮件后续的操作,他无法接收邮件,只能求邮件管理者告诉他需要的邮件,那么就会产生一个订阅的操作。
3.那么每个对象中需要做的事情是什么?
(1)邮件事件对象 :
a.继承于事件EventArgs,定义该事件的参数。
b. 定义一个邮件事件的委托,负责给邮件管理者用。
(2) 邮件管理者:
a. 定义接收邮件的委托对象,作为触发邮件事件的对象。
b. 有一个触发事件的函数,需要触发该函数,才能接收邮件这个时间。
c. 可以包装一下这个触发事件,满足邮件事件对象的要求。
d. 通知 订阅者(打印机),邮件到了,可以进行打印了。
(3)打印机 事件订阅者
a. 订阅事件,求邮件管理者帮忙通知他一下。
b. 收到通知后,后续处理函数。
4. 理解了以上事件的流程,那么可以粘贴代码了。
4.1 事件对象
/// <summary>
/// 定义事件委托,负责给管理者用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void MailEventHandler(object sender, MailEventArgs e);
/// <summary>
/// 事件类
/// </summary>
public class MailEventArgs: EventArgs
{
public string From;
public string To;
public string Content;
public MailEventArgs(string from, string to, string content)
{
this.From = from;
this.To = to;
this.Content = content;
}
}
4.2 事件管理者(邮件管理)
/// <summary>
/// 事件管理者,(邮件管理)
/// </summary>
public class MailManager
{
/// <summary>
/// 定义接收邮件事件
/// </summary>
public event MailEventHandler MailHandler;
/// <summary>
/// 触发事件函数
/// </summary>
/// <param name="e"></param>
public void OnMail(MailEventArgs e)
{
var handler = this.MailHandler;
if(handler != null)
{
handler(this, e);
}
}
/// <summary>
/// 包装一下触发函数
/// </summary>
public void ReceiveMail(string from ,string to, string content)
{
MailEventArgs e = new MailEventArgs(from, to, content);
OnMail(e);
}
}
4.3 事件的订阅者,打印处理
/// <summary>
/// 事件订阅者,传真打印
/// </summary>
public class Fax
{
/// <summary>
/// 事件订阅,管理者通知订阅者进行下一步操作。(传真打印)
/// </summary>
/// <param name="mm"></param>
public Fax(MailManager mm)
{
mm.MailHandler += FaxMsg;
}
/// <summary>
/// 订阅者处理事情
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void FaxMsg(object sender, MailEventArgs e)
{
Console.WriteLine("打印{0},{1},{2}", e.To, e.From, e.Content);
}
}
4.4 什么时候接收到邮件,通知打印机
static void Main(string[] args)
{
MailManager mm = new MailManager();
mm.ReceiveMail("Bill", "Mike", "nihao");
Fax fax = new Fax(mm);
}
搞定。
C# 事件 解析的更多相关文章
- jquery关于移动端的点击事件解析
jquery关于移动端的点击事件解析 如果用click来写 你连续点几下 会没有反应 响应是非常慢的 所以移动端必须用touchstart代替click来写
- 【ABAP系列】SAP ABAP选择屏幕(SELECTION SCREEN)事件解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP选择屏幕(SEL ...
- Spring事件解析
首先介绍Spring事件相关类的关系: 其中EventListener与EventObject均是Java SE的范畴,源码如下: package java.util; public interfac ...
- Jquery 鼠标事件解析
1 mouseover与mousemove的区别: mouseover是当鼠标移动到对象时产生,只产生一次,这时如果继续在对象上移动,不会再产生mouseover事件,而是mousemove事件,mo ...
- javascript中的cookie,以及事件解析
Cookie: 它的意思是在本地的客户端的磁盘上以很小的文件形式保存数据,Cookie的处理原则上需要在服务器环境下运行,目前Chrome不可以在客户端操作Cookie,其他浏览器均可以, Coo ...
- SharePoint 2010中列表Add和Delete事件解析
转:http://winsystem.ctocio.com.cn/26/11400026_2.shtml [IT专家网独家撰稿]SharePoint 2010与以前的版本相比,天翻地覆的变化并不为过. ...
- C#事件解析
事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要,其实C#事件就是基于window ...
- javascript event 事件解析
event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有意义.比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout ...
- C#事件の事件解析
事件(event)是基于windows消息处理机制的类,封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于事件的应用程序来.委托(delegate)委托可以理解成为函数指针,不同的 ...
随机推荐
- FreeMarker与Thymeleaf
FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 ...
- redist命令操作(二)--哈希Hash,列表List
1.Redis 哈希(Hash) 参考菜鸟教程:http://www.runoob.com/redis/redis-hashes.html Redis hash 是一个string类型的field和v ...
- 【Java】【10】后台处理Emoji表情
问题:存到数据库的emoji表情,取出来后,在前端显示为乱码 环境:SpringBoot + Oracle(MySQL据说是支持表情的) 解决方案: 引入emoji相关的jar包,使用很方便,不过表情 ...
- Vue打包npm run build 打包后空白怎么解决?
问题一:路径报错并且页面空白 解决:buld/index.js assetsPublicPath: '/'修改为 assetsPublicPath: './' 问题二:没报错页面空白 ro ...
- 跟踪mqttv3源码(一)
Spring整合MQTT pom.xml <!-- MQTT消息队列 --> <dependency> <groupId>org.eclipse.paho</ ...
- VUE + vue-cli + webpack 创建新项目(2)
上一篇其实没写完. 好吧这一篇其实也没啥. 就补充一些上一篇没写完的.(随时害怕笔记本丢失的人) 上一篇写完了登录验证的跳转,这一片首先补充一下接口(?). 在使用axios的过程中,我们家后台表示你 ...
- jQuery和Vue的区别
1.jQuery和Vue的区别 jQuery是使用选择器($)选取DOM对象,对其进行赋值.取值.事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起 ...
- Python3列表(list)比较操作教程
一.相等比较 1.1 同顺序列表比较 顺序相同直接用“==”进行比较即可 list1 = ["one","two","three"] lis ...
- WebService调用SSAS教程
WebService调用SSAS教程 一.创建SSAS项目 使用SQL Server Business Intelligence Development Studio新建Analysis Servic ...
- PDF 补丁丁 0.6.0.3355 版发布(修复阅读模式、书签缩放的问题)
PDF补丁丁的新版本修复了染色阅读模式失效.编辑器书签缩放比例调整在某些场合下失败的问题.