zoukankan      html  css  js  c++  java
  • 委托事件学习笔记

    1.委托
    a).委托(delegate)是一种可以把引用 存储为 函数 的类型。这听起来相当棘手,但其机制是非常简单的。委托最重要的用途在本书后面介绍到事件和事件处理时才能解释清楚,但这里也将介绍有关委托的许多内容。委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。委托的声明指定了一个返回类型和一个参数列表。
    b).在定义了委托之后,就可以声明该委托类型的变量。接着把这个变量初始化为于委托有相同返回类型和参数列表的函数引用。之后就可以使用委托变量调用这个函数,就像该变量是一个函数一样。
    c).有了引用函数的变量后,还可以执行不能用其他方式完成的操作。例如,可以把委托变量作为参数传递给一个函数,这样,该函数就可以使用委托调用它引用的任何函数,而且在运行之前无需知道调用的是哪个函数。

    d).委托的定义如下所示:
        delegate double ProcessDelegate(double param1,double param2)

    e).delegate关键字指定该定义是用于委托的,而不是用于函数的(该定义所在的位置与函数定义相同)。

    f).要把一个函数引用赋值给委托变量,必须使用new关键字创建一个新委托,然后指定委托的类型,提供一个引用所需函数的参数(即将某函数名直接传入,不带‘()’)
    g).就像选择一个要使用的插件一样,把他们传递给函数委托,就可以控制函数的执行。例如,一个函数要对字符串数组按照字母进行排序。对列表排序有几个不同的方法,他们的性能取决于要排序的列表特性。使用委托可以把一个排序算法函数委托传递给排序函数,指定要使用的方法。
    h).委托有许多用途,但如前所述,他们的大多数常见用途主要与事件处理有关

    2.事件

    a).事件的含义:(Page 349)
    事件类似于异常,因为他们都是由对象引发(抛出),我们可以提供代码来处理事件。但他们也有几个重要的区别。最重要的区别是并没有与Try…Catch类似的结构来处理事件,而必须订阅(subscribe)他们。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,他们称为事件处理程序。


    单个事件可供多个处理程序订阅,在该事件发生时,这些处理程序都会被调用,其中包括引发该事件的对象所在的类中的事件处理程序,但事件处理程序也可能在其他类中。
    事件处理程序本身都是简单的方法。对事件处理方法的唯一限制是它必须匹配于事件所要求的返回类型和参数,这个限制是事件定义的一部分,由一个委托指定


    /*在事件中使用委托时非常有用的*/
    基本处理过程如下所示:首先,应用程序创建一个可以引发事件的对象。例如,假定一个即时消息传递应用程序创建的对象表示一个远程用户的连接。当接收到通过该链接从远程用户传过来的信息时,这个连接对象会引发一个事件。

    接着,应用程序订阅事件。为此,即时消息传送应用程序将定义一个方法,该方法可以与事件指定的委托类型一起使用,把这个方法的一个引用传送给事件,而事件的处理方法可以是另一个对象的方法,假定是表示显示设备的对象,当接收到信息时,该方法将显示即时消息。

    引发事件后,就通知订阅器。当接收到通过连接对象传来的即时消息时,就调用显示设备对象上的事件处理方法。因为我们使用的是一个标准方法,所以引发事件的对象可以通过参数传送任何相关的信息,这样就大大增加了事件的通用性。在本例中,一个参数是即时消息的文本,事件处理程序可以在显示设备对象上显示它.

    b).处理事件
    如前所述,要处理事件,需要提供一个事件处理方法来订阅事件,该方法的返回类型和参数应该匹配事件指定的委托。

    c).定义事件

    本人所做阅读笔记并附示例下载:委托.事件

  • 相关阅读:
    rt_list_entry() 函数
    替换空格
    跳台阶
    斐波那契数列
    基于5221码的同步十进制加法计数器
    强连通分量+Tarjia+缩点
    次小生成树
    差分约束
    P1547 Out of Hay
    P1197 [JSOI2008]星球大战
  • 原文地址:https://www.cnblogs.com/ethanwill/p/3670686.html
Copyright © 2011-2022 走看看