注册事件处理器
*----------------------------------------------------------------------*
* CLASS c1 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS c1 DEFINITION."事件源
PUBLIC SECTION.
EVENTS: e1 EXPORTING value(p1) TYPE c,e2.
CLASS-EVENTS ce1 EXPORTING value(p2) TYPE i.
METHODS:trigger."事件触发方法
ENDCLASS. "c1 DEFINITION
*----------------------------------------------------------------------*
* CLASS c1 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS c1 IMPLEMENTATION.
METHOD trigger.
RAISE EVENT: e1 EXPORTING p1 = 'A',e2,ce1 EXPORTING p2 = 1.
ENDMETHOD. "trigger
ENDCLASS. "c1 IMPLEMENTATION
*静态(如下面的h1方法)或非静态(如下面的h2方法)事件处理方法都可以处理静态或非静态事件,事件的处理方法是否只能处理
*静态的还是非静态事件与事件的静态与否没有关系,但事件的触发方法与事件的静态与否有关系(实例方法既可触发静态事件,也可
*触发非静态事件,但静态方法就只能触发静态事件);但是,事件的处理方法虽然能处理的事件与事件的静态与否没有关系,但如果
*处理的是静态事件,那此处理方法就成为了今天处理器,只能采用静态注册方法对此处理方法进行注册。如果处理的是非静态事件,
*那此处理方法就是非静态处理器,只能采用非静态注册方式对此处理方法进行注册
*处理器的静态与否与处理方法本身是否静态没有关系,只与处理的事件是否静态有关
*----------------------------------------------------------------------*
* CLASS c2 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS c2 DEFINITION."监听器:即事件处理器
PUBLIC SECTION.
"静态方法也可以处理非静态事件,此方法属于非静态处理器,只能采用非静态注册方式
CLASS-METHODS h1 FOR EVENT e1 OF c1 IMPORTING p1 sender.
"非静态方法处理非静态事件,此方法属于非静态处理器,只能采用非静态注册方式
METHODS:h2 FOR EVENT e2 OF c1 IMPORTING sender,
"非静态方法当时更可以处理静态事件,此方法属于静态处理器,只能采用静态注册方式
h3 FOR EVENT ce1 OF c1 IMPORTING p2.
ENDCLASS. "c2 DEFINITION
*----------------------------------------------------------------------*
* CLASS c2 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS c2 IMPLEMENTATION.
METHOD h1.
WRITE: 'c2=>h1'.
ENDMETHOD. "h1
METHOD :h2.
WRITE:'c2=>h2'.
ENDMETHOD. ":h2
METHOD:h3.
WRITE:'c2=>h3'.
ENDMETHOD. "h3
ENDCLASS. "c2 IMPLEMENTATION
DATA:trigger TYPE REF TO c1,
trigger2 TYPE REF TO c1,
handler TYPE REF TO c2.
START-OF-SELECTION.
CREATE OBJECT trigger.
CREATE OBJECT trigger2.
CREATE OBJECT handler.
"由于h1、h2两个处理方法分别是用来处理非静态事件e1、e2的,所以只能采用实例注册方式
SET HANDLER:c2=>h1 handler->h2 FOR trigger,
"h3处理方法是用来处理静态事件ce1的,属于静态处理器,所以只能采用静态注册方法
handler->h3.
trigger->trigger( ).
"虽然trigger( ) 方法会触发e1,e2,ce1三种事件,但h1、h2未向实例trigger2注册,而h3属于静态处理器,即好比向所有实例注册过了一样
trigger2->trigger( ).