您的位置:首页 > 编程语言 > C#

《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 }

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  读书笔记 C#