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. [Windows] 重新安装/卸载桌面版OneDrive / Reinstall/ Uninstall Desktop Version OneDrive

    Deep within the OS is a backup copy of the OneDriver installer. To find it, go to  File Explorer> ...

  2. 按照固定字符数切割字符串 基于python的re正则表达式

    def cut_text(text,lenth): textArr = re.findall('.{'+str(lenth)+'}', text) textArr.append(text[(len(t ...

  3. Jedis路由key的算法剥离

    在Redis集群中,会有很多个分片,如果此时利用Jedis来操作此Redis集群,那么他会把数据路由到不到的分片上.而且如果动态的往集群中增加分片,也不会影响Jedis的功能.究竟是怎么做到的呢? 由 ...

  4. 室内Vary 渲染部分作品

    室内Vary 渲染倍分作品

  5. Linux 问题

    Loaded plugins: fastestmirror cd /etc/yum.repos.d mv CentOS-Base.repo CentOS-Base.repo.backup wget h ...

  6. 【基础】使用cookies,实现免登陆(七)

    实现过程: 1.测试网站:www.dx.com 2.登陆后的cookies:"DXSSO","Token=20A0FA7D-XXXX-XXXX-XXXX".至于 ...

  7. padding属性很有用

    html代码中的text-align有时失效,特别是用bootstrap时,用padding-left:xx%,能够很好定位,而且只能够电脑和手机浏览器显示的统一.

  8. MATLAB绘图hist

    刚登上号,已经学了一半了,就从现在开始写吧 以前学过的东西老忘,所以就注册个账号就当做记笔记吧 MATLAB在原来的数组中增加新行 A=[A;B]%B是要增加的行: hist使用方法 y=4*rand ...

  9. HTML的块级元素和行内元素

    行内元素一般是内容的容器,而块级元素一般是其他容器的容器.一般情况下,行内元素只能包含内容或者其它行内元素,宽度和长度依据内容而定,不可以设置,可以和其它元素和平共处于一行:而块级元素可以包含行内元素 ...

  10. http中的socket是怎么一回事

    首先我们先看一下socket的定义:是在传输层和应用层中间的一个抽象层,是实现网络通信的接口. 那么什么是传输层,什么是应用层呢?网络又是怎样通信的呢?为了弄清这两个问题,我们需要弄清一个概念TCP/ ...