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);
            }
    

      

  • 相关阅读:
    核心编程笔记8——用户模式下的线程同步
    核心编程随笔7——线程调度和优先级
    深入浅出mfc随笔——MFc程序的生死因果
    opengl
    核心编程6——线程
    深入浅出mfc学习笔记——六大关键技术之仿真_运行时和动态创建
    深入浅出mfc学习笔记——六大关键技术仿真_Persistence(永久保存)
    Gdi+编程
    深入浅出mfc学习笔记1
    file open等待事件
  • 原文地址:https://www.cnblogs.com/jzhou/p/4994816.html
Copyright © 2011-2022 走看看