2021-2-17
事件
事件与 组播委托 十分相似。虽然任意类均可绑定事件,但只有声明事件的类可以调用事件 的 Broadcast、IsBound 和 Clear 函数。这意味着事件对象可在公共接口中公开,而无需让外部类访问这些敏感度函数。事件使用情况有:在纯抽象类中包含回调、限制外部类调用 Broadcast、IsBound 和 Clear 函数。
只有声明事件的类可以调用事件
只有声明事件的类可以调用事件
只有声明事件的类可以调用事件
声明事件
事件的声明和 组播委托声明 方式几乎相同,唯一的区别是它们使用事件特有的宏变体。
声明宏 描述
DECLARE_EVENT( OwningType, EventName ) 创建一个事件。
DECLARE_EVENT_OneParam( OwningType, EventName, Param1Type ) 创建带一个参数的事件。
DECLARE_EVENT_TwoParams( OwningType, EventName, Param1Type, Param2Type ) 创建带两个参数的事件。
DECLARE_EVENT_Params( OwningType, EventName, Param1Type, Param2Type, …) 创建带 N 个参数的事件。
注:DECLARE_EVENT 宏的首个参数是"拥有"此事件的类,因此可调用 Broadcast() 函数。
绑定事件
事件绑定与 组播委托绑定 方式相同。
事件执行
事件允许附带多个函数委托,然后调用事件的 Broadcast() 函数将它们一次性全部执行。事件签名不允许使用返回值。对于事件而言,只有定义事件的类才能调用 Broadcast() 函数。
即使不存在绑定,在事件上调用 Broadcast() 也是安全操作。唯一需要注意的情况是使用事件初始化输出变量,通常不建议执行此操作。
调用 Broadcast() 函数时,被绑定函数的执行顺序尚未定义。有可能不按照函数的添加顺序执行。
Broadcast() 将此事件广播到所有绑定对象,已失效的对象除外。
例:
测试函数(属于待绑定的对象)的实现仅打印函数名
声明,一般在类的定义里面,在制造委托的类中声明
绑定及调用,此处写在同一个函数内
其他类调用事件