《CLR via C#》读书笔记 之 事件
2013-02-27 11:07
155 查看
第十一章 事件
2013-02-2711.1 设计要公开事件的类型
11.3 设计侦听事件的类型
11.4客户端操作
ToDo: 用uml把类的关系画出来
为了帮助理解事件如何工作,先描述一个和事件相关的场景。假定现在要设计一个电子邮件系统,它的功能是:当邮件到达时,用户可以设置将邮件发送给传真机或寻呼机。
11.1 设计要公开事件的类型
返回第一步:定义一个类型来容纳发送给事件通知者的信息
第二步:定义事件成员
第三步:定义一个负责引发事件的方法,它通知已登记对象
第四步:定义方法将输入转化为期望事件
//step1:定义一个类型来容纳发送给事件通知者的信息 class NewMailEventArgs : EventArgs { private readonly String m_from, m_to, m_subject; public String From { get { return m_from; } } public String To { get { return m_to; } } public String Subject { get { return m_subject; } } public NewMailEventArgs(String from, String to, String subject) { m_from = from; m_to = to; m_subject = subject; } } class MailManager { //step2: 定义事件成员 public event EventHandler<NewMailEventArgs> NewMail; //step3:定义一个负责引发事件的方法,它通知已登记对象 protected virtual void OnNewMail(NewMailEventArgs e) { //// .net framework最初发表时引发事件方式 //if (NewMail != null) NewMail(this, e); //定义方法将输入转化为期望事件 EventHandler<NewMailEventArgs> temp = System.Threading.Interlocked.CompareExchange(ref NewMail, null, null); //任何方法登记了对事件的关注,通知他们 if (temp != null) temp(this, e); } //step4:定义方法将输入转化为期望事件 public void SimulateNewMail(String from, String to, String subject) { NewMailEventArgs e = new NewMailEventArgs(from, to, subject); OnNewMail(e); } }
11.3 设计侦听事件的类型
返回class Fax { public Fax(MailManager mm) { mm.NewMail += FaxMsg; } private 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); } public void Unregister(MailManager mm) { mm.NewMail -= FaxMsg; } }
11.4客户端操作
返回static void Main(string[] args) { MailManager manager = new MailManager(); Fax fax = new Fax(manager); manager.SimulateNewMail("北京", "上海", "通知"); fax.Unregister(manager); manager.SimulateNewMail("上海", "北京", "通知"); Console.Read(); }
相关文章推荐
- 《CLR via C#》读书笔记---11事件
- CLR via C# 读书笔记 3-6 比较APM和EAP(异步编程模型和基于事件的编程模式)
- CLR via C# 读书笔记 事件
- CLR via C# 读书笔记(三)关于"is" 和"as"操作符
- [读书笔记]参数out和ref-CLR via C# edition3
- CLR via C# 读书笔记(七)线程同步的几种解决办法
- 《CLR via C#》读书笔记(5) -- 构造函数
- 《CLR via C#》读书笔记(一)——CLR的执行模式
- 基于代的垃圾回收机制--《CLR via C#》读书笔记
- CLR via C# 读书笔记 委托
- CLR via C# 异常管理读书笔记
- CLR via C# 读书笔记 5-5 预留大内存
- 读书笔记—CLR via C#委托和attribute
- 《CLR via C#》读书笔记-异步编程(五)
- CLR via C# 3 读书笔记(12):第2章 生成、打包、部署和管理应用程序与类型 — 2.4 将模块组合为程序集(上)
- CLR via C# 读书笔记 运行时序列化
- 《CLR via C#》读书笔记-.NET多线程(五)
- 《CLR via C#》读书笔记之:类型基础
- CLR via C# 3 读书笔记(15):第2章 生成、打包、部署和管理应用程序与类型 — 2.6 语言文化 & 2.7 简单应用程序部署
- CLR基础之一---认识CLR [《CLR via C#》读书笔记]