标签:
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事件,所有已登记的方法都会有机会以自己的方式处理新邮件
标签:
原文地址:http://www.cnblogs.com/Ares945/p/event.html