跳转至

MiniEvent

  • 种类: class
  • 命名空间: Runestone.AesirArchitecture
  • 程序集: Runestone.AesirArchitecture

继承链: System.Object → MiniEvent

实现接口: System.IDisposable

类型参数

  • T — 事件参数类型

声明

public sealed class MiniEvent : System.IDisposable

单参事件

备注

基于 Action{T} 委托的轻量级事件实现。不使用 List{T} 存储监听者, 而是直接通过 += / -= 操作委托,实现 Invoke 路径零分配(直接多播调用)。 注意:订阅与退订路径(+= / -=)有与当前监听者数量成正比的委托分配,仅适合低频订阅场景。 AddListener 返回 AutoRemoveListenerHandle, 支持使用 using 语句在作用域结束时自动移除监听,或通过 RemoveListenerExtensions 绑定到 Unity 生命周期事件。

与 C# event 关键字的区别:MiniEvent{T} 提供 Dispose 方法, 可主动清空所有委托引用,适合在响应式系统中随宿主对象一起释放资源, 而 C# event 没有内置的清空机制。

构造方法

名称 描述
MiniEvent() —

MiniEvent()

public MiniEvent()

方法

声明的方法

名称 描述
AddListener(Action) 添加监听者,并返回可自动移除的监听句柄
Dispose() 清空所有委托引用,释放内存
Invoke() 调用事件,通知所有监听者
RemoveListener(Action) 移除监听者

继承的方法

名称 描述 声明类型
GetType() — object
Equals(object) — object
GetHashCode() — object
ToString() — object
MemberwiseClone() — object
Finalize() — object

AddListener(Action)

添加监听者,并返回可自动移除的监听句柄

public AutoRemoveListenerHandle AddListener(Action listener)

参数

名称 类型 说明
listener Action 要添加的事件监听委托

返回值

类型 说明
AutoRemoveListenerHandle 用于后续自动移除该监听的句柄

Dispose()

清空所有委托引用,释放内存

备注

将内部委托置空,断开对所有监听者的引用,防止因监听者长期存活而导致的内存泄漏。 调用后所有已注册的监听者将不再被通知,但不会触发各监听者的移除逻辑—— 如需逐个移除,应使用 RemoveListener 或通过 AutoRemoveListenerHandle。

public void Dispose()

Invoke()

调用事件,通知所有监听者

备注

直接多播调用,零分配。异常语义与原生 C# 事件一致:某个监听者抛出异常会中断后续监听者的执行 并向上传播(fail-fast)——监听回调不应抛异常属框架约定,业务异常应在回调内部自行处理。

public void Invoke()

RemoveListener(Action)

移除监听者

public void RemoveListener(Action listener)

参数

名称 类型 说明
listener Action 要移除的事件监听委托

Additional Notes

首个 ## Additional Notes 是增量生成文档标识符,请勿修改标题级别和内容!本文档由 Script Doc Generator 辅助生成。