zoukankan      html  css  js  c++  java
  • .net事件机制

    --------------------------------------------------------------类(包含有事件)的定义
    /// <summary>
       /// 开始事件
       /// </summary>
       public class StartEventArgs:EventArgs
       {
        private int total;
        private string str_msg;
        public int Totla
        {
         get
         {
          return this.total;
         }
         set
         {
          this.total=value;
         }
        }
        public string Str_msg
        {
         get
         {
          return str_msg;
         }
         set
         {
          this.str_msg=value;
         }
        }
        public StartEventArgs(int total,string str_msg)
        {
         this.total=total;
         this.str_msg=str_msg;
        }
       }
       public delegate void StartEventHandler(object sender,StartEventArgs e);

       public event StartEventHandler StartWork;

       protected virtual void OnStarWork(StartEventArgs e)
       {
        if(StartWork!=null)
        {
         StartWork(this,e);
        }
       }
    /// <summary>
       /// 批量从***添加数据库(考勤数据)
       /// </summary>
       public void DBSetLogList()
       {
        int i=0;
        ArrayList list=GetGeneralLogData();
        foreach(GeneralData g in list)
        {
         i+=1;
         StartEventArgs args1=new StartEventArgs(i,"当前第"+i.ToString()+"条数据添加到数据库...");//实例化参数
         OnStar(args1);//向外部发出通知
         DBSetGereralData(g);
        }
        StartEventArgs args2=new StartEventArgs(i,"考勤数据回收完成!");
        OnStar(args2);
       }



    ---------------------------------------------------事件与处理程序的挂接
    /// <summary>
       ///  批量从考勤机添加数据库(考勤数据)
       /// </summary>
       public void DBSetLogList()
       {
        DataAccess.GeneralDataDA da=new DataAccess.GeneralDataDA(this.finger,this.iMachinaNum);
        da.Start+=new FingerClass.DataAccess.GeneralDataDA.StartEventHandler(da_Start);
        da.DBSetLogList();
       }

    ------------------------------------------------------------------事件处理程序
    private void da_Start(object sender, FingerClass.DataAccess.GeneralDataDA.StartEventArgs e)
       {

        StartEventArgs args=new StartEventArgs(e.Totla,e.Str_msg);//实例化参数
        OnStar(args);//向外部发出通知
       }




     .NET Framework 类库设计指南中的约定:

    (1)事件委托名称应以 EventHandler 为结尾;

    (2)事件委托的“规格”应该是两个参数:第一个参数是 object 类型的 sender,代表发出事件通知的对象(代码中一般是 this 关键字(VB.NET 中是 Me))。第二个参数 e,应该是 EventArgs 类型或者从 EventArgs 继承而来的类型;

    事件参数类型,应从 EventArgs 继承,名称应以 EventArgs 结尾。应该将所有想通过事件、传达到外界的信息,放在事件参数 e 中。

    (3)一般的,只要类不是密封(C# 中的 sealed,VB.NET 中的 NotInheritable)的,或者说此类可被继承,应该为每个事件提供一个 protected 并且是可重写(C# 用 virtual,VB.NET 用 Overridable)的 OnXxxx 方法:该方法名称,应该是 On 加上事件的名称;只有一个事件参数 e;一般在该方法中进行 null 判断,并且把 this/Me 作为 sender 执行事件委托;在需要发出事件通知的地方,应调用此 OnXxxx 方法。

    对于此类的子类,如果要改变发生此事件时的行为,应重写 OnXxxx 方法;并且在重写时,一般情况下应调用基类的此方法(C# 里的 base.OnXxxx,VB.NET 用 MyBase.OnXxxx)。

  • 相关阅读:
    django LDAP
    Python egg
    皮皮书屋
    Linux运维
    bash shell 快捷键汇总
    linux ldconfig
    Linux set env export declare unset
    OpenStack
    【LeetCode】258. Add Digits
    一个"Median Maintenance"问题
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/607843.html
Copyright © 2011-2022 走看看