码迷,mamicode.com
首页 > Windows程序 > 详细

《CLR via C#》事件

时间:2014-12-20 11:33:54      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

  • 设计要公开事件的类型
 1     //定义类型来容纳所有需要发送给事件通接收者的附加信息
 2     internal class NewMailEventArgs : EventArgs
 3     {
 4         private readonly string m_from, m_to, m_subject;
 5         public NewMailEventArgs(string from, string to, string subject)
 6         {
 7             m_from = from;
 8             m_to = to;
 9             m_subject = subject;
10         }
11 
12         public string From { get { return m_from; } }
13         public string To { get { return m_to; } }
14         public string Subject { get { return m_subject; } }
15     }
 1     internal class MailManager
 2     {
 3         public event EventHandler<NewMailEventArgs> NewMail;//定义事件成员
 4 
 5         //定义一个负责引发事件的方法,它通知已登记的对象
 6         protected virtual void OnNewMail(NewMailEventArgs e)
 7         {
 8             EventHandler<NewMailEventArgs> temp = Interlocked.CompareExchange(ref NewMail, null, null);//避免事件竞态问题
 9             if (temp != null)
10             {
11                 temp(this, e);
12             }
13         }
14 
15         //定义方法将输入转化为期望事件
16         public void SimulateNewMail(string from, string to, string subject)
17         {
18             NewMailEventArgs e = new NewMailEventArgs(from, to, subject);
19             OnNewMail(e);
20         }
21     }
  • 设计侦听事件的类型
 1     //设计侦听事件类型的事件
 2    internal class Fax
 3     {
 4        public Fax(MailManager mm) {
 5            mm.NewMail += mm_NewMail;
 6        }
 7 
 8       public void mm_NewMail(object sender, NewMailEventArgs e)
 9        {
10            //throw new NotImplementedException();
11            Console.WriteLine("{0}--->{1}:{2}", e.From, e.To, e.Subject);
12        }
13 
14       public void Unregister(MailManager mm) {
15           mm.NewMail -= mm_NewMail;//移除事件
16       }
17     }

技术分享

MailManager提供一个NewMail事件;构造Fax对象时,它向MailManager的NewMail事件登记了自己的一个实例方法,这样一来新的邮件到达时,MailManager就知道通知Fax对象;在某个时刻,当MailManager接收到一封新的电子邮件时,会引发NewMail事件,所有已登记的方法都会有机会以自己的方式处理新邮件

 

《CLR via C#》事件

标签:

原文地址:http://www.cnblogs.com/Ares945/p/event.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!