zoukankan      html  css  js  c++  java
  • 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.");
    
            }
  • 相关阅读:
    codeforces 1140D(区间dp/思维题)
    区间dp之四边形不等式优化详解及证明
    poj1947
    hdu4044
    poj1155
    poj3162(树形dp+优先队列)
    hdu4003详解(树形dp+多组背包)
    poj1947(树形背包)
    hdu1011(树形背包)(提供一个特殊样例)
    CopyOnWriteArrayList总结
  • 原文地址:https://www.cnblogs.com/zhangzhi19861216/p/4969739.html
Copyright © 2011-2022 走看看