标签:
/// <summary> /// 事件数据 /// </summary> internal sealed class NewMailEventArgs : EventArgs { private readonly String m_from, m_to, m_subject; public NewMailEventArgs(String from, String to, String subject) { m_from = from; m_to = to; m_subject = subject; } /// <summary> /// 发件人 /// </summary> public String From { get { return m_from; } } /// <summary> /// 收件人 /// </summary> public String To { get { return m_to; } } /// <summary> /// 标题 /// </summary> public String Subject { get { return m_subject; } } } internal class MailManager { private EventHandler<NewMailEventArgs> m_NewMail; // 事件属性 public event EventHandler<NewMailEventArgs> NewMail { add { m_NewMail += value; } remove { m_NewMail -= value; } } protected virtual void OnNewMail(NewMailEventArgs e) { //EventHandler<NewMailEventArgs> temp = // Interlocked.CompareExchange(ref m_NewMail, null, null); //if (temp != null) temp(this, e); if (m_NewMail != null) { m_NewMail.Invoke(this,e); } } /// <summary> /// 模拟新邮件 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="subject"></param> public void SimulateNewMail(String from, String to, String subject) { NewMailEventArgs e = new NewMailEventArgs(from, to, subject); OnNewMail(e); } } /// <summary> /// 传真 /// </summary> internal sealed class Fax { public Fax(MailManager mm) { mm.NewMail += FaxMsg; } private void FaxMsg(Object sender, NewMailEventArgs e) { Console.WriteLine("传真邮件信息:"); Console.WriteLine(" From={0}, To={1}, Subject={2}", e.From, e.To, e.Subject); } public void Unregister(MailManager mm) { mm.NewMail -= FaxMsg; } } internal sealed class Pager { public Pager(MailManager mm) { mm.NewMail += SendMsgToPager; } private void SendMsgToPager(Object sender, NewMailEventArgs e) { Console.WriteLine("发送邮件到寻呼机:"); Console.WriteLine(" From={0}, To={1}, Subject={2}", e.From, e.To, e.Subject); } public void Unregister(MailManager mm) { mm.NewMail -= SendMsgToPager; } }
客户端:
static void Main(string[] args) { // Construct a MailManager object MailManager mm = new MailManager(); // Construct a Fax object passing it the MailManager object Fax fax = new Fax(mm); // Construct a Pager object passing it the MailManager object Pager pager = new Pager(mm); // Simulate an incoming mail message mm.SimulateNewMail("Jeffrey", "Kristin", "I Love You!"); // Force the Fax object to unregister itself with the MailManager fax.Unregister(mm); // Simulate an incoming mail message mm.SimulateNewMail("Jeffrey", "Mom & Dad", "Happy Birthday."); }
标签:
原文地址:http://www.cnblogs.com/zhangzhi19861216/p/4969739.html