From 103792f178cb639edff6ef6f318d8f022f95efb5 Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Sat, 17 Jan 2026 13:08:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(state):=20=E4=B8=BA=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=9F=BA=E7=B1=BB=E6=B7=BB=E5=8A=A0=E9=94=80=E6=AF=81=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现 IDisposable 接口以支持资源清理 - 添加 Destroy 方法用于状态销毁和资源释放 - 在状态机切换时调用 Destroy 替代 Dispose - 允许子类重写 Destroy 方法执行特定清理操作 - 确保状态切换时正确释放相关资源 --- .../state/ContextAwareStateBase.cs | 23 +++++++++++++------ .../state/ContextAwareStateMachine.cs | 3 ++- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/GFramework.Core/state/ContextAwareStateBase.cs b/GFramework.Core/state/ContextAwareStateBase.cs index c0ca514..7eecbe8 100644 --- a/GFramework.Core/state/ContextAwareStateBase.cs +++ b/GFramework.Core/state/ContextAwareStateBase.cs @@ -1,6 +1,7 @@ using GFramework.Core.Abstractions.architecture; using GFramework.Core.Abstractions.rule; using GFramework.Core.Abstractions.state; +using IDisposable = GFramework.Core.Abstractions.lifecycle.IDisposable; namespace GFramework.Core.state; @@ -9,7 +10,7 @@ namespace GFramework.Core.state; /// 提供基础的状态管理功能和架构上下文访问能力 /// 实现了IState和IContextAware接口 /// -public class ContextAwareStateBase : IState, IContextAware +public class ContextAwareStateBase : IState, IContextAware, IDisposable { /// /// 架构上下文引用,用于访问架构相关的服务和数据 @@ -34,12 +35,20 @@ public class ContextAwareStateBase : IState, IContextAware return _context!; } + /// + /// 销毁当前状态,释放相关资源 + /// 子类可重写此方法以执行特定的清理操作 + /// + public virtual void Destroy() + { + } + /// /// 进入状态时调用的方法 /// 子类可重写此方法以实现特定的状态进入逻辑 /// - /// 从哪个状态转换而来,可能为null表示初始状态 - public virtual void OnEnter(IState? fromState) + /// 从哪个状态转换而来,可能为null表示初始状态 + public virtual void OnEnter(IState? from) { } @@ -47,8 +56,8 @@ public class ContextAwareStateBase : IState, IContextAware /// 退出状态时调用的方法 /// 子类可重写此方法以实现特定的状态退出逻辑 /// - /// 将要转换到的目标状态,可能为null表示结束状态 - public virtual void OnExit(IState? toState) + /// 将要转换到的目标状态,可能为null表示结束状态 + public virtual void OnExit(IState? to) { } @@ -56,9 +65,9 @@ public class ContextAwareStateBase : IState, IContextAware /// 判断当前状态是否可以转换到目标状态 /// 子类可重写此方法以实现自定义的状态转换规则 /// - /// 希望转换到的目标状态对象 + /// 希望转换到的目标状态对象 /// 如果允许转换则返回true,否则返回false - public virtual bool CanTransitionTo(IState targetState) + public virtual bool CanTransitionTo(IState target) { return true; } diff --git a/GFramework.Core/state/ContextAwareStateMachine.cs b/GFramework.Core/state/ContextAwareStateMachine.cs index c385502..d47fef4 100644 --- a/GFramework.Core/state/ContextAwareStateMachine.cs +++ b/GFramework.Core/state/ContextAwareStateMachine.cs @@ -4,6 +4,7 @@ using GFramework.Core.Abstractions.rule; using GFramework.Core.Abstractions.state; using GFramework.Core.Abstractions.system; using GFramework.Core.extensions; +using IDisposable = GFramework.Core.Abstractions.lifecycle.IDisposable; namespace GFramework.Core.state; @@ -71,7 +72,7 @@ public class ContextAwareStateMachine : StateMachine, ISystem // 清理所有状态 foreach (var state in States.Values.OfType()) { - state.Dispose(); + state.Destroy(); } States.Clear();