事件和监听概念

事件模型

活动表示对象内发生的变化或行动。例如,

  • 类数据的修改

  • 一个方法的执行

  • 查询或设置属性值

  • 物体的破坏

基本上,您可以通过编程检测到任何活动可以产生一个事件和其他对象进行通信的信息。

MATLAB®类定义了通信事件的发生到其他对象的事件进行响应的处理。事件模型的工作原理是这样的:

下图说明的事件模型。

限制

还有的使用事件有一定的局限性:

  • 事件源无法保证听众存在触发事件时。

  • 一位听众无法阻止其他侦听器通知所发生的事件。

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

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

默认的事件数据

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

  • 事件名称- 在类中定义的事件名称事件

  • 资源- 这是事件的源对象

MATLAB传递源对象在所需的事件数据参数中的监听器的回调。使用源对象从您的听者回调函数中访问任何对象的公共属性。

自定义事件数据

您可以创建的一个子类event.EventData类在侦听器回调函数提供更多的信息。子类将定义属性以包含附加数据,并提供构建衍生事件的数据对象的方法,因此它可以被传递到通知方法。

定义事件的具体数据提供了示出如何定制这个数据的示例。

活动只有在句柄类

您只能在手柄类定义的事件。之所以存在这种限制是因为值类是只在一个单一的MATLAB工作区中看到这样没有回调或监听器可以访问触发事件的对象。回调可以访问该对象的副本。但是,访问一个副本,因为回调不能访问触发事件或影响该对象中的任何改变对象的当前状态是没有用的。

手柄和值类的比较提供手柄类的一般信息。

事件和监听器语法显示了定义一个句柄类和事件的语法。

财产设置和查询活动

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

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

  • 后集- 触发属性值设置刚过

  • PreGet- 触发之前的属性值查询服务,调用它可以访问方法之前,

  • PostGet- 只是触发属性值返回查询后

这些事件被预定义的,并且不需要在类上市事件块。

当属性事件发生时,回调传递一个event.PropertyEvent目的。这个对象有三个属性:

  • 事件名称- 所述事件的名称中描述该数据对象

  • 资源- 源对象,它的类定义数据对象所描述的事件

  • AffectedObject- 对象其属性是此事件的源(即,AffectedObject包含其属性已或者访问或修改)对象。

您可以通过继承定义自己的属性更改事件数据event.EventData类。该event.PropertyEvent类是一个密封的子类event.EventData

看到倾听更改属性值该进程的创建属性侦听器的说明。

看到在后集事件监听器的一个例子。

看到属性访问方法对于财产价值是控制访问的方法的信息。

听众

听众封装到一个事件的响应。监听对象属于event.listener类,它是定义下述性能的手柄类:

  • 资源- 手柄或数组产生的事件的对象的句柄

  • 事件名称- 事件的名称

  • 打回来- 当启用侦听器能够接收事件通知功能执行

  • 启用- 回调函数执行,只有当启用真正。看到启用和禁用监听器的一个例子。

  • 递归- 允许监听器来触发导致回调的执行相同的事件。

    递归默认。如果回调触发为它定义为回调的情况下,监听器不能执行递归。因此,设置递归如果回调必须触发自己的事件。设置递归属性真正可以创造一个无限递归达到递归限制并触发一个错误的情况。

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