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. Hadoop InputFormat 输入文件分片

    1. Mapper 与 Reducer 数量 对于一个默认的MapReduce Job 来说,map任务的数量等于输入文件被划分成的分块数,这个取决于输入文件的大小以及文件块的大小(如果此文件在 HD ...

  2. 解密:Amazon亚马逊产品Listing关键词刷单排名原理

    第一:基本概念   在阅读正文之前,请先理解下面的几个基本概念.   核心词[高频词.热词.大词.主词]:长度大约1~2个单词构成,指每天搜索量比较多的词,每个行业对高频词的划分不一样,这个主要看自己 ...

  3. (最完美)红米手机5的Usb调试模式在哪里打开的教程

    就在我们使用安卓手机接通PC的时候,或者使用的有些app比如我们企业营销部门就在使用的app引号精灵,之前老版本就需要开启usb开发者调试模式下使用,现就在新版本不需要了,如果手机没有开启usb开发者 ...

  4. VUE基本常识

    1.运行vue项目  项目根目录git Bash here npm run dev 为了能直接打开项目  配置项目package.json   添加--open  如下图: 2.坑:VUE初写小项目问 ...

  5. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  6. Vue打包npm run build 打包后空白怎么解决?

    问题一:路径报错并且页面空白 解决:buld/index.js      assetsPublicPath: '/'修改为 assetsPublicPath: './' 问题二:没报错页面空白  ro ...

  7. 苹果手机的SB系列(3)超级烦人的账户解锁?

    不知道大家有没有这种体验,Iphone 每隔一段时间后账户就被锁定了,也不告诉你原因,就是要解锁? 我怎么感觉比做的比支付宝差多了,我注册支付宝十几年,也没有动不动就告诉了有安全原因,要解锁,要重置密 ...

  8. JavaScript热身练习1

    把某个元素移出你的视线: 1.display:none:(显示为无,不占地) 2.visibility:hidden:(隐藏,占地) 3.宽或者高设置为零 4.透明度设置 5.left/top (定位 ...

  9. Mac搭建SVN服务器+Cornerstone连接服务器

    Mac自带svn,我们只需配置并开启就可以了,打开终端,输入svnserve --version查看svn版本 可以看到我的mac自带的svn版本号为1.9.7,下面开始配置服务器: 1.终端输入su ...

  10. Oracle数据库TNS错误解决方法

    ORA-12154: TNS:could not resolve the connect identifier specified ,即无法解析指定的连接 标识符.这说明缺少了一个环境变量,TNS_A ...