首页 > 代码库 > 《CLR via C#》事件
《CLR via C#》事件
- 设计要公开事件的类型
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#》事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。