zoukankan      html  css  js  c++  java
  • 第十一章(CLR 事件)

    1.设计事件要公开事件类型:

      第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息

      

     public  class NewMaillEventArgs:EventArgs
        {
            private readonly string _m_from;
            private readonly string _m_to;
            private readonly string _m_subject;
            public NewMaillEventArgs(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; } }
    
    
        }
    

      

      第二步:定义事件成员

        事件成员使用C#关键字event来定义。每个事件成员都要指定以下内容:

          一个可访问性标识符(几乎肯定是Public,这样其他代码才能访问该事件成员);

          另一个委托类型,它指出要调用的方法的原型,以及一个名称(可以是任意有效的标识符)。

      //定义成员变量
      public event EventHandler<NewMaillEventArgs> NewMaill;
    

      

      注意:事件模式要求所有事件处理程序(方法)的返回类型都是void;

      第三步:定义负责引发事件的方法来通知事件的登记对象。

      

     //如果类是密封的,该方法要声明为私有和非虚
            protected virtual void OnNewMaill(NewMaillEventArgs e)
            {
                //出于线程安全的考虑,现在将对委托字段的引用复制到一个临时变量时
                EventHandler<NewMaillEventArgs> temp = Volatile.Read(ref NewMaill);
                //任何方法登记了事件的关注,就通知它们
                if (temp!=null)
                {
                    temp(this, e);
                }
            }
    

      

      第四步:定义方法将输入转化为期望事件

      

      public void SimulateNewMaill(String from, String to, String subject)
            {
                NewMaillEventArgs e=new NewMaillEventArgs(from,to,subject);
                OnNewMaill(e);
            }
    

      

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/jzhou/p/4994816.html
Copyright © 2011-2022 走看看