主要内容

事件和监听器的概念

事件模型

发生在对象的事件代表更改或动作。例如,

  • 修改类数据

  • 执行一个方法

  • 查询或设置属性值

  • 对象的破坏

基本上,任何活动,你可以检测编程可以生成一个事件和信息传达给其他对象。

MATLAB®类定义一个过程,对其他对象的通信事件的发生,对事件作出回应。事件模型的工作原理是这样的:

下图说明了事件模型。

限制

有一些限制使用事件:

  • 事件源不能保证当触发事件监听器存在。

  • 一个侦听器不能防止其他听众通知事件发生。

  • 听众的顺序执行没有定义。

  • 听众不应该修改事件数据对象传递给侦听器回调,因为其他听众传递同样的处理对象。

违约事件数据

事件监听器提供的信息回调,回调函数传递一个事件数据参数。默认情况下,MATLAB传递一个event.EventData侦听器回调对象。这个对象有两个属性:

  • EventName——事件中定义的类名事件

  • ——对象是事件的来源

MATLAB将源对象传递给侦听器回调事件数据所需的参数。使用源对象来访问对象的公共属性的任何在你的侦听器回调函数。

自定义事件数据

您可以创建的一个子类event.EventData类来提供额外的信息来侦听器回调函数。子类将定义属性包含额外的数据和提供一种方法来构造派生事件数据对象可以传递到通知方法。

定义相关的数据提供了一个示例显示如何定制这些数据。

事件仅在处理类

您可以定义事件只有在处理类。这一限制的存在,因为一个值类是可见的只有在一个MATLAB工作区所以没有回调或侦听器可以访问触发事件的对象。回调可能访问对象的一个副本。然而,访问一个副本不是有用,因为回调无法访问的对象的当前状态触发事件或影响任何对象的变化。

处理的比较和价值类提供一般信息处理类。

事件和监听器的语法显示的语法定义一个处理类和事件。

属性集和查询事件

有四个预定义的事件相关的属性:

  • 预设——触发属性值设置之前,之前调用它的设置访问方法

  • PostSet-属性值设置后触发

  • PreGet——前触发属性值查询服务,调用它的获得方法

  • PostGet——触发后返回查询的属性值

这些事件中列出预定义和不需要的类事件块。

当一个属性事件发生时,通过一个回调event.PropertyEvent对象。这个对象有三个属性:

  • EventName——事件描述的数据对象的名称

  • ——源对象的类定义了事件所描述的数据对象

  • AffectedObject——对象的属性是这个事件的源(即,AffectedObject包含对象的属性被访问或修改)。

你可以定义自己的属性改变事件数据通过子类化event.EventData类。的event.PropertyEvent类是一个密封的子类event.EventData

看到监听改变属性值为创建过程的描述属性的听众。

看到PostSet事件监听器了一个例子。

看到属性访问方法信息访问控制属性值的方法。

听众

听众封装响应事件。属于侦听器对象event.listener类,它是一个处理类,定义了以下属性:

  • ——处理或数组生成事件的处理对象

  • EventName-事件的名称

  • 回调——函数时执行一个启用监听器接收事件通知

  • 启用——回调函数只有当执行启用真正的。看到启用和禁用的听众了一个例子。

  • 递归——允许监听器触发相同的事件,导致执行的回调函数。

    递归默认情况下。如果回调触发的事件定义为回调,听者无法执行递归。因此,设置递归如果回调必须触发的事件。设置递归财产真正的可以创建一个情况无限递归到递归限制和引发一个错误。

控制侦听器生命周期提供更具体的信息。