using System; namespace AlicizaX { public sealed class BindableProperty { private T _value; private Action _onValueChanged; /// /// 值 /// public T Value { get { return _value; } set { if (!Equals(_value, value)) { _value = value; _onValueChanged?.Invoke(_value); } } } private BindableProperty() { _onValueChanged = null; } /// /// 默认构造函数 /// /// 默认值 public BindableProperty(T defaultValue = default) : this() { _value = defaultValue; } /// /// 注册值变化事件 /// /// /// public BindableProperty Add(Action callback) { GameFrameworkGuard.NotNull(callback, nameof(callback)); _onValueChanged += callback; return this; } /// /// 注册事件 /// /// /// public BindableProperty RegisterWithInitValue(Action callback) { GameFrameworkGuard.NotNull(callback, nameof(callback)); callback?.Invoke(_value); return Add(callback); } /// /// 移除事件 /// /// 事件 public void Remove(Action callback) { GameFrameworkGuard.NotNull(callback, nameof(callback)); _onValueChanged -= callback; } /// /// 清除事件 /// public void Clear() { _onValueChanged = null; } } }