博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《CLR via C#》读书笔记 之 事件
阅读量:5898 次
发布时间:2019-06-19

本文共 2470 字,大约阅读时间需要 8 分钟。

第十一章 事件

2013-02-27

ToDo: 用uml把类的关系画出来 

为了帮助理解事件如何工作,先描述一个和事件相关的场景。假定现在要设计一个电子邮件系统,它的功能是:当邮件到达时,用户可以设置将邮件发送给传真机或寻呼机。

11.1 设计要公开事件的类型


第一步:定义一个类型来容纳发送给事件通知者的信息

第二步:定义事件成员

第三步:定义一个负责引发事件的方法,它通知已登记对象

第四步:定义方法将输入转化为期望事件

1     //step1:定义一个类型来容纳发送给事件通知者的信息 2     class NewMailEventArgs : EventArgs 3     { 4         private readonly String m_from, m_to, m_subject; 5         public String From { get { return m_from; } } 6         public String To { get { return m_to; } } 7         public String Subject { get { return m_subject; } }  8  9         public NewMailEventArgs(String from, String to, String subject)10         {11             m_from = from; m_to = to; m_subject = subject;12         }       13     } 14 15     class MailManager16     {17         //step2: 定义事件成员18         public event EventHandler
NewMail; 19 20 //step3:定义一个负责引发事件的方法,它通知已登记对象21 protected virtual void OnNewMail(NewMailEventArgs e)22 {23 //// .net framework最初发表时引发事件方式24 //if (NewMail != null) NewMail(this, e); 25 26 //定义方法将输入转化为期望事件27 EventHandler
temp = System.Threading.Interlocked.CompareExchange(ref NewMail, null, null);28 //任何方法登记了对事件的关注,通知他们29 if (temp != null) temp(this, e);30 } 31 32 //step4:定义方法将输入转化为期望事件33 public void SimulateNewMail(String from, String to, String subject)34 {35 NewMailEventArgs e = new NewMailEventArgs(from, to, subject);36 OnNewMail(e);37 }38 }

11.3 设计侦听事件的类型


 

1     class Fax 2     { 3         public Fax(MailManager mm) 4         { 5             mm.NewMail += FaxMsg; 6         }  7  8         private void FaxMsg(Object sender, NewMailEventArgs e) 9         {10             Console.WriteLine("Faxing mail message:");11             Console.WriteLine("   From={0}, To={1}, Subject={2}", e.From, e.To, e.Subject);12         } 13 14         public void Unregister(MailManager mm)15         {16             mm.NewMail -= FaxMsg;17         }18     }

11.4客户端操作


 

1         static void Main(string[] args)2         {3             MailManager manager = new MailManager();4             Fax fax = new Fax(manager);5             manager.SimulateNewMail("北京", "上海", "通知");6             fax.Unregister(manager);7             manager.SimulateNewMail("上海", "北京", "通知");8             Console.Read();9         }

 

转载于:https://www.cnblogs.com/Ming8006/archive/2013/02/27/2934801.html

你可能感兴趣的文章
day1
查看>>
GNU GRUB version 0.97 (630K lower /2053824K upper memory)
查看>>
urllib与urllib2的学习总结
查看>>
如何配置Qt使用VS2010进行开发-转
查看>>
JS中 this 的四种用法
查看>>
JavaScript:数据类型
查看>>
Mysql深入理解(1)
查看>>
BodyPaint__操作步骤
查看>>
curl
查看>>
1、(w3school)javascript学习总结--javascript的功能
查看>>
poj 2234 Matches Game
查看>>
2018年全国多校算法寒假训练营练习比赛(第五场)
查看>>
080_Dataloader.io
查看>>
计算机网络概述
查看>>
sax方式解析XML学习笔记
查看>>
Springboot配置(上)
查看>>
python基础一 day17 初识递归
查看>>
Android中的Selector(转)
查看>>
留个记录。
查看>>
TensorFlow从入门到理解(一):搭建开发环境【基于Ubuntu18.04】
查看>>