2021-2-15
官方文档
多播委托
多播委托拥有大部分与单播委托相同的功能。它们只拥有对对象的弱引用,可以与结构体一起使用,可以四处轻松复制等等。
就像常规委托一样,多播委托可以远程加载/保存和触发;但多播委托函数不能使用返回值。它们最适合用来 四处轻松传递一组委托。
事件 是一种特殊类型的多播委托,它在访问"Broadcast()"、"IsBound()"和"Clear()"函数时会受到限制。
声明多播委托
多播委托在声明方式上与声明标准委托 相同,只是前者使用特定于多播委托的宏变体。
DECLARE_MULTICAST_DELEGATE[_RetVal, …]( DelegateName ) 创建一个多播委托。
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, …]( DelegateName ) 创建一个动态多播委托。
绑定多播委托
多播委托可以绑定多个函数,当委托触发时,将调用所有这些函数。因此,绑定函数在语义上与数组更加类似。
多播执行
多播委托允许您附加多个函数委托,然后通过调用多播委托的"Broadcast()"函数一次性同时执行它们。多播委托签名不得使用返回值。
在多播委托上调用"Broadcast()"总是安全的,即使是在没有任何绑定时也是如此。唯一需要注意的是,如果您使用委托来初始化输出变量,通常会带来非常不利的后果。
调用"Broadcast()"时绑定函数的执行顺序尚未定义。执行顺序可能与函数的添加顺序不相同。
“Broadcast()” 将该委托广播给所有绑定的对象,但可能已过期的对象除外。
例:
测试函数(属于待绑定的对象)的实现仅打印函数名
声明(FTest(Dynamic)MultiDelegate是委托参数,Value为参数名),在制造委托的类中声明
一个委托变量&一个制造委托的函数(属于制造委托的类)
带参数的对象函数(属于制造委托的类)
带参数的静态函数(属于制造委托的类)
常规的多播绑定 (属于制造委托的类)
(关于匿名函数)
动态的多播绑定 (属于制造委托的类)
调用,属于需要调用委托的对象