通常定义事件 都是通过自定义委托的方式来实现, 今天使用EventHandler   委托来定义事件:

    public class NewMailEventArgs : EventArgs
{ private readonly string m_from;
private readonly string m_to;
private readonly string m_subject; public NewMailEventArgs(string from, string to, string subject)
{
m_from = from;
m_to = to;
m_subject = subject;
} public string From { get { return m_from; } }
public string To { get { return m_to; } }
public string Subject { get { return m_subject; } } } //定义事件成员
public class MailManager
{
public event EventHandler<NewMailEventArgs> NewMail; public virtual void OnNewMail(NewMailEventArgs e)
{
//Volatile线程 Threading.Tasks
EventHandler<NewMailEventArgs> temp = Volatile.Read(ref NewMail); if (temp != null)
{
temp(this, e);
}
} public void SimulateNewMail(string from, string to, string subject)
{
//构造一个对象来容纳想传给通知接受者的信息
NewMailEventArgs e = new NewMailEventArgs(from, to, subject); //调用虚方法通知对象事件已发生
//如果没有类型重写该方法,我们的对象将通知事件的所有等级对象
OnNewMail(e);
} } public sealed class Fax {
/// <summary>
/// 将MailManager 对象传给构造器
/// </summary>
/// <param name="mail"></param>
public Fax(MailManager mail)
{
mail.NewMail += FaxMsg;
} /// <summary>
/// 注销事件
/// </summary>
/// <param name="mail"></param>
public void UnFax(MailManager mail)
{
mail.NewMail -= FaxMsg;
} //新电子邮件到达时,mailManager调用这个方法
public void FaxMsg(object sender, NewMailEventArgs e)
{
Console.WriteLine("Faxing mail message:");
Console.WriteLine(" From={0},To={1},Subject={2}", e.From, e.To, e.Subject);
} } static void Main(string[] args)
{ MailManager mail = new MailManager(); Fax fax = new Fax(mail); mail.SimulateNewMail("from0", "to1", "subject2"); }

.net EventHandler 事件处理的更多相关文章

  1. CQRS框架:AxonFramework 之 Hello World

    Command Query Responsibility Segregation,CQRS 这个架构好象最近博客园里讨论得比较多,有几篇园友的文章很有深度,推荐阅读: CQRS架构简介 浅谈命令查询职 ...

  2. jQuery操作Dom、jQuery事件机制、jQuery补充部分

    jQuery操作Dom: 修改属性: //使用attr()方法 //attr(name, value) //name:要修改的属性的属性名 //value:对应的值 //attr方法,如果当前标签有要 ...

  3. C#的反射机制

    using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...

  4. webkit内核分析之 Frame

    参考地址:http://blog.csdn.net/dlmu2001/article/details/6164873 1.    描述 Frame类是WebCore内核同应用之间联系的一个重要的类.它 ...

  5. [转]Geoserver全面了解

    From:http://www.cnblogs.com/ada-zheng/archive/2013/07/16/3192921.html Geoserver是一个功能齐全,遵循OGC开放标准的开源W ...

  6. Sliverlight之 矢量绘图

    目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x ...

  7. 【第五篇】androidEventbus源代码阅读和分析之发送粘性事件和接收粘性事件代码分析

    代码里面发送粘性事件代码如下: // 发送Sticky事件 EventBus.getDefault().postSticky(new User("soyoungboy", &quo ...

  8. 微信小程序基本组件概述

    为了更好的理解微信小程序,本文90%文字描述来源于官网的介绍.官网原链接https://mp.weixin.qq.com/debug/wxadoc/dev/component/?t=20161222 ...

  9. nodejs----初期学习笔记

    //一 回调函数 //require---命令//Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.//例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件 ...

随机推荐

  1. python开发_python概述

    Python(KK 英语发音:/ˈpaɪθən/,是一种面向对象.直译式计算机程序设计语言, 由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. Python语法 ...

  2. [Z]图灵奖获得者Richard Karp讲述Berkeley CS的发展史

    A Personal View of Computer Science at Berkeley 赤裸裸的吊炸天

  3. python学习——练习题(8)

    """ 题目:输出 9*9 乘法口诀表. """ def answer1(): """ 自己用最普通的双重循环 ...

  4. Balls(poj 3783)

    The classic Two Glass Balls brain-teaser is often posed as: “Given two identical glass spheres, you ...

  5. jbpm角色审批

    可分配是一个部门或角色组,也可以选择一个表达式操作,提交任务时可以根据权限过滤这个部门或组的用户中选择一个可操作用户 <task name="审核">          ...

  6. druid 连接池的配置

    dataSource配置   <!-- 基于Druid数据库链接池的数据源配置 --> <bean id="dataSource" class="com ...

  7. textarea文本域的高度随内容的变化而变化

    用css控制textarea文本域的高度随内容的变化而变化,不出现滚动条. CSS代码: 复制代码 代码如下: .t_area{ width:300px; overflow-y:visible } & ...

  8. 在ios端点击按钮闪烁解决方法(小tips)

    在ios端,safari浏览器上触发click事件有300ms的延迟响应,为touch添加的样式会和click冲突而出现闪烁问题 在safari中触摸事件的相应顺序如下: touchstart --& ...

  9. shell编程之sed语法

    首先插播条广告:  想要进一个文件夹去 看下面有那些文件 必须对这个文件夹有执行权限. sed p  打印对应的行  2p 打印第二行. -n  只输出经过sed 命令处理的行 看图吧 不太会擅长言语 ...

  10. H5 css学习

    p{text-indent:2em;}段前空两格   段落排版--行间距(行高) p{line-height:1.5em;} 段落排版--中文字间距.字母间距  h1{    letter-spaci ...