zoukankan      html  css  js  c++  java
  • 委托事件

    使用委托时要先实例化,和类一样,使用new关键字产生委托的新实例,然后将一个或者多个与委托签名匹配的方法与委托实例关联。随后调用委托时,就会调用所有与委托实例关联的方法。

    与委托关联可以是任何类或者结构中的方法,可以是静态方法,只要是可以访问的方法都可以。创建一个委托类型使用关键字delegate(委托)

    将方法作为参数传递

    委托可以让方法作为参数传递给其它方法

     事件自身就是委托类型,由于委托可以绑定和调用多个方法,所以会为事件的处理带来方便。类型只需要对外公开事件,就可以与外部的其它地方关联,从而实现事件订阅

    要在类中声明事件,首先要定义用来作为事件封装类型的委托,用event关键字来声明事件。为了允许派生类重写引发事件的代码,通常会在类中声明一个受保护的方法,习惯上

    命名On<事件名>

    protected virtual    表示受保护的,virtual 关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。

    由于不同的事件要传递的参数不同,更多时候是从EventArgs类派生的子类的实例,显然EventHandler委托时不能满足各种情况的。

    如果针对不同的事件也定义一个对应的委托,数量一旦多起来,不好管理,为了解决这个问题,.NET类库提供了一个带有泛型参数的事件

    处理委托。

    public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e);   TEventArgs 是一个泛型参数

     多播委托:

    每个委托都只包含一个方法调用,调用委托的次数和调用方法的次数相同。如果需要调用委托的一次可以执行多个方法,我们需要多播委托

    多播委托就是一个包含多个方法的委托就叫多播委托

    委托的概念:

    定义:委托(Delegate)是一个类,它定义了方法的类型。实现了将一个方法当作另一个方法的参数来传递。

    声明:public delegate 返回值 委托名称(参数)

    实例化委托:

    MyDelegate myDelegate= new MyDelegate (WriteToFile)

    MyDelegate myDelegate=WriteToFile

    委托变量在使用时,跟方法的调用在形式上是一样的。

    例如: int num = myDelegate();

    //定义委托

    delegate int MyDelegate(string str);

    //将方法传递给委托

    MyDelegate myDelegate = new MyDelegate(GetLength);

    //执行委托

    int result = myDelegate("my name is zhangdonglei");

    委托的一个有趣且有用的属性是,他不知道也不关心所引用的方法和类;只关心引用的方法是否具有与委托相同的参数和返回值。

    多播委托:

    每个委托都只包含一个方法调用,调用委托的次数和调用方法的次数相同。如果需要调用委托的一次可以执行多个方法,这时我们就需要多播委托。

    通俗来讲,多播委托就是一个包含多个方法的委托称为多播委托

     委托链

    委托链就是链接多个委托的委托

     什么是事件

    事件(Event)基本上说是一个用户操作,如按键,点击,/鼠标移动等等,或者是一些出现,如系统胜澈的通知。应用程序需要在事件发生时响应事件

    事件在类中声明且生成,且通过使用同一个类或其他类的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为发布器(publisher)类。其他接受该事件的类被称为订阅器(subscriber)类。事件使用发布—订阅(publisher—subscriber)模型。

    发布器(publisher)是一个包含事件和委托定义对象。事件和委托之间的联系也定义在这对象中。发布器(subscriber)是一个接受事件并提供事件处理程序的对象。发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。

    事件的声明:

    在类的内部声明事件,首先必须声明该事件的委托类型。

      public delegate void BoilerLogHanddler(string status);

    然后,使用event关键字,声明事件本身:

      public event BoilerLogHandler BoilerEventLog;

    事件的订阅

    BoilerEventLog+=BoilerLogHandler(show);

    BolierEventLog+show;

  • 相关阅读:
    Linux中几种常用的查看文件内容的命令(file,cat,more,less,head,tail)
    Linux 链接文件讲解
    postgreSQL psql工具使用详解
    将Redhat,CentOS,Ubuntu虚拟机的IP设为静态IP的方法
    Hive中的Order by与关系型数据库中的order by语句的异同点
    Hadoop namenode节点无法启动的问题解决
    虚拟机上的Ubuntu 文件系统成为只读模式的解决办法
    Hive参数的临时设置和永久性设置
    hive动态分区和混合分区
    MongoDB之Linux下的安装
  • 原文地址:https://www.cnblogs.com/zhangdonglei/p/11166194.html
Copyright © 2011-2022 走看看