zoukankan      html  css  js  c++  java
  • 事件

    一、设计要公开事件的类型
    1,第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息

    2,第二步:定义事件成员

    3,第三步:定义负责引发事件的方法来通知事件的登记对象
    4,第四部:定义方法将输入转化为期望事件

    //第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息
        public 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;
            }
            public string From {
                get { return m_from;}
            }
            public string To
            {
                get { return m_to; }
            }
            public string Subject
            {
                get { return m_subject; }
            }
        }
    View Code
        public class MailManager
        {
    
            //第二步:定义事件成员
            public event EventHandler<NewMailEventArgs> NewMail;
    
            //第三步:定义负责引发事件的方法来通知事件的登记对象
            protected virtual void OnNewMail(NewMailEventArgs e)
            {
                e.Raise(this, ref NewMail);
            }
    
            //第四部:定义方法将输入转化为期望事件
            public void SimulateNewMail(string from, string to, string subject)
            {
                NewMailEventArgs e = new NewMailEventArgs(from, to, subject);
                OnNewMail(e);
            }
    
        }
    View Code
        public static class EventArgExtensions
        {
            public static void Raise<TEventArg>(this TEventArg tEventArg, object sender,
                ref EventHandler<TEventArg> eventArgs) where TEventArg : EventArgs
            {
    
                //Volatile.Read :防止编译器优化掉代码,把temp优化掉了
                EventHandler<TEventArg> temp = Volatile.Read(ref eventArgs);
                if (temp != null)
                    temp(sender, tEventArg);
            }
        }
    View Code
    学习永不止境,技术成就梦想。
  • 相关阅读:
    BZOJ1093: [ZJOI2007]最大半连通子图
    BZOJ4033: [HAOI2015]树上染色
    BZOJ1977: [BeiJing2010组队]次小生成树 Tree
    BZOJ4944: [Noi2017]泳池
    BZOJ1269: [AHOI2006]文本编辑器editor
    BZOJ4596: [Shoi2016]黑暗前的幻想乡
    BZOJ1815: [Shoi2006]color 有色图
    BZOJ1488: [HNOI2009]图的同构
    BZOJ3527: [Zjoi2014]力
    Salazar Slytherin's Locket CodeForces
  • 原文地址:https://www.cnblogs.com/zd1994/p/6691113.html
Copyright © 2011-2022 走看看