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# 事件 解析的更多相关文章

  1. jquery关于移动端的点击事件解析

    jquery关于移动端的点击事件解析 如果用click来写 你连续点几下 会没有反应 响应是非常慢的 所以移动端必须用touchstart代替click来写

  2. 【ABAP系列】SAP ABAP选择屏幕(SELECTION SCREEN)事件解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP选择屏幕(SEL ...

  3. Spring事件解析

    首先介绍Spring事件相关类的关系: 其中EventListener与EventObject均是Java SE的范畴,源码如下: package java.util; public interfac ...

  4. Jquery 鼠标事件解析

    1 mouseover与mousemove的区别: mouseover是当鼠标移动到对象时产生,只产生一次,这时如果继续在对象上移动,不会再产生mouseover事件,而是mousemove事件,mo ...

  5. javascript中的cookie,以及事件解析

    Cookie: 它的意思是在本地的客户端的磁盘上以很小的文件形式保存数据,Cookie的处理原则上需要在服务器环境下运行,目前Chrome不可以在客户端操作Cookie,其他浏览器均可以,   Coo ...

  6. SharePoint 2010中列表Add和Delete事件解析

    转:http://winsystem.ctocio.com.cn/26/11400026_2.shtml [IT专家网独家撰稿]SharePoint 2010与以前的版本相比,天翻地覆的变化并不为过. ...

  7. C#事件解析

    事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要,其实C#事件就是基于window ...

  8. javascript event 事件解析

    event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有意义.比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout ...

  9. C#事件の事件解析

    事件(event)是基于windows消息处理机制的类,封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于事件的应用程序来.委托(delegate)委托可以理解成为函数指针,不同的 ...

随机推荐

  1. css实现垂直水平居中的方法(个数不限)?

    方法一:使用绝对定位 大家都知道margin:0 auto;能够实现水平居中,但却不知道margin:0 auto;也是可以实现垂直居中的: 给居中元素添加如下样式: .Absolute-Center ...

  2. 记一次简单的sql注入

     什么是sql注入攻击?  所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影 ...

  3. js给图层添加动态样式

    需求:需要在视窗内随意点击对应位置,图层从上到下匀速运动到指定位置 html <img id="moveDot" class="moveDot" src= ...

  4. srping的历史与哲学

    历史: 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功, ...

  5. shell脚本学习之for循环

    1.数字循环 [root@zabbix ~]# for i in {1..10};do echo $(expr $i \* 3);done;36912151821242730 [root@zabbix ...

  6. linux jpg文件查找木马

    find ./ -type f -name "*.jpg" | xargs grep "eval"

  7. PHP语言学习之php做图片上传功能

    本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...

  8. 【C语言】数组知识点总结

    [C语言]数组知识点总结 标签: 数组 2018年04月12日 17:44:4481人阅读 评论(0) 收藏 举报  分类: C语言知识总结(4)  版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  9. explode() 字符串分割函数

    说明 本函数返回由字符串组成的数组,其中的每个元素都是由 separator 作为边界点分割出来的子字符串. separator 参数不能是空字符串.如果 separator 为空字符串(" ...

  10. Jeecg

    姓名:黄于霞          班级:软件151 1.第一步将Jeecg引包到javaEE中,如图下图所示: 2.第二步改jeecg_config.properties中的用户名和密码改成和数据库中一 ...