《CLR via C#:框架设计》读书笔记 - 事件
2016-04-21 17:27
246 查看
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 MailManager
16 {
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 }
复制代码
返回
第一步:定义一个类型来容纳发送给事件通知者的信息
第二步:定义事件成员
第三步:定义一个负责引发事件的方法,它通知已登记对象
第四步:定义方法将输入转化为期望事件
复制代码
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 MailManager
16 {
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 }
复制代码
相关文章推荐
- c#调用COM组件
- 只需十分钟,结果大不同 |《深度思考》
- 《洋葱阅读法》读书笔记
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法