跳转至

ObservableValue<T>

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

继承链: System.Object → ObservableValue<T>

实现接口: Runestone.AesirArchitecture.IObservableValue<T>,Runestone.AesirArchitecture.IReadOnlyObservableValue<T>

类型参数

  • T — 属性值类型

声明

[Serializable]
public sealed class ObservableValue<T> : Runestone.AesirArchitecture.IObservableValue<T>, 
Runestone.AesirArchitecture.IReadOnlyObservableValue<T> 

可观察属性实现。 Model 层持有可写实例,View 层通过 IReadOnlyObservableValue{T} 只读订阅。

备注

内部使用 MiniEvent{T} 管理监听者——Invoke 路径零分配(直接多播调用)。 [SerializeField] 标记 value 字段使其可在 Inspector 中编辑。

PrivateValueFieldName 和 InvokeMethodName 常量供 ObservableValueAttributeProcessor 反射引用,避免硬编码字符串导致的重构断裂。

值比较使用 EqualityComparer{T}.Default.Equals,支持值类型和引用类型的正确比较。

构造方法

名称 描述
ObservableValue() 默认构造,使用类型 T 的默认值
ObservableValue(T) 默认构造,使用类型 T 的默认值

ObservableValue()

默认构造,使用类型 T 的默认值

public ObservableValue<T>()

ObservableValue(T)

默认构造,使用类型 T 的默认值

public ObservableValue<T>(T initialValue)

参数

名称 类型 说明
initialValue T —

字段

名称 描述
InvokeMethodName —
PrivateValueFieldName —

InvokeMethodName

public const string InvokeMethodName = "InvokeEvent";

PrivateValueFieldName

public const string PrivateValueFieldName = "value";

属性

名称 描述
Value 读写属性值。设置新值时若与旧值不同,则触发变更通知。

Value

读写属性值。设置新值时若与旧值不同,则触发变更通知。

备注

使用 EqualityComparer{T}.Default 判断值是否变化,仅在变化时触发 MiniEvent{T}.Invoke。

public T Value { get; set; }

方法

声明的方法

名称 描述
AddListener(Action<T>) 添加监听者。回调参数为新值。
AddListenerAndInvoke(Action<T>) 添加监听并立即触发一次当前值,用于初始化时同步监听方状态。
ClearListeners() 清除所有监听。
InvokeEvent() 触发值变更通知,用于强制刷新订阅方状态。
RemoveListener(Action<T>) 移除监听者。
SetValueSilently(T) 静默设置值,不触发通知。用于反序列化或批量更新后统一触发。

继承的方法

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

AddListener(Action)

添加监听者。回调参数为新值。

public AutoRemoveListenerHandle AddListener(Action<T> callback)

参数

名称 类型 说明
callback Action<T> 值变更时调用的回调函数,参数为变更后的新值。

返回值

类型 说明
AutoRemoveListenerHandle 返回一个 AutoRemoveListenerHandle,释放后自动移除监听,避免手动管理生命周期。

AddListenerAndInvoke(Action)

添加监听并立即触发一次当前值,用于初始化时同步监听方状态。

备注

先通过 AddListener 添加监听,再立即用当前值触发一次回调,确保订阅方在注册瞬间即可同步初始状态。

public AutoRemoveListenerHandle AddListenerAndInvoke(Action<T> callback)

参数

名称 类型 说明
callback Action<T> 值变更时调用的回调函数,参数为变更后的新值。

返回值

类型 说明
AutoRemoveListenerHandle 返回一个 AutoRemoveListenerHandle,释放后自动移除监听。

ClearListeners()

清除所有监听。

备注

清除所有监听引用,防止因监听者未释放导致的内存泄漏。 命名对齐可观察集合的 ClearListeners——清除的是监听者而非值本身。

public void ClearListeners()

InvokeEvent()

触发值变更通知,用于强制刷新订阅方状态。

备注

强制触发通知,用于值未变但需要刷新订阅方状态的场景。

public void InvokeEvent()

RemoveListener(Action)

移除监听者。

public void RemoveListener(Action<T> callback)

参数

名称 类型 说明
callback Action<T> 先前通过 AddListener 注册的回调函数。

SetValueSilently(T)

静默设置值,不触发通知。用于反序列化或批量更新后统一触发。

备注

不触发变更通知,但仍做值比较——值未变时跳过赋值,避免无意义的引用替换。

public void SetValueSilently(T v)

参数

名称 类型 说明
v T 要设置的新值。

Additional Notes

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