C# 事件

/// <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.");

        }

 

posted @ 2015-11-16 18:45  zzhi.wang  阅读(197)  评论(0编辑  收藏  举报