mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 调整了 Architecture 类中字段和方法的布局,提升可读性 - 优化了命令执行逻辑,明确区分有无返回值的命令处理 - 规范了接口和抽象类的注释格式,增强文档清晰度 - 统一了代码风格,对齐缩进与换行符使用 - 补充了事件系统中泛型事件类的功能实现 - 完善了 README 文档中的条目结构和内容表述
73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
namespace GFramework.Core.events;
|
||
|
||
/// <summary>
|
||
/// EasyEvents事件管理器类,用于全局事件的注册、获取和管理
|
||
/// 提供了类型安全的事件系统,支持泛型事件的自动创建和检索
|
||
/// </summary>
|
||
public class EasyEvents
|
||
{
|
||
/// <summary>
|
||
/// 全局单例事件管理器实例
|
||
/// </summary>
|
||
private static readonly EasyEvents MGlobalEvents = new();
|
||
|
||
/// <summary>
|
||
/// 存储事件类型与事件实例映射关系的字典
|
||
/// </summary>
|
||
private readonly Dictionary<Type, IEasyEvent> _mTypeEvents = new();
|
||
|
||
/// <summary>
|
||
/// 获取指定类型的全局事件实例
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型,必须实现IEasyEvent接口</typeparam>
|
||
/// <returns>指定类型的事件实例,如果未注册则返回默认值</returns>
|
||
public static T Get<T>() where T : IEasyEvent
|
||
{
|
||
return MGlobalEvents.GetEvent<T>();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 注册指定类型的全局事件
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型,必须实现IEasyEvent接口且具有无参构造函数</typeparam>
|
||
public static void Register<T>() where T : IEasyEvent, new()
|
||
{
|
||
MGlobalEvents.AddEvent<T>();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加指定类型的事件到事件字典中
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型,必须实现IEasyEvent接口且具有无参构造函数</typeparam>
|
||
public void AddEvent<T>() where T : IEasyEvent, new()
|
||
{
|
||
_mTypeEvents.Add(typeof(T), new T());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取指定类型的事件实例
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型,必须实现IEasyEvent接口</typeparam>
|
||
/// <returns>指定类型的事件实例,如果不存在则返回默认值</returns>
|
||
public T GetEvent<T>() where T : IEasyEvent
|
||
{
|
||
return _mTypeEvents.TryGetValue(typeof(T), out var e) ? (T)e : default;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取指定类型的事件实例,如果不存在则创建并添加到事件字典中
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型,必须实现IEasyEvent接口且具有无参构造函数</typeparam>
|
||
/// <returns>指定类型的事件实例</returns>
|
||
public T GetOrAddEvent<T>() where T : IEasyEvent, new()
|
||
{
|
||
var eType = typeof(T);
|
||
// 尝试从字典中获取事件实例
|
||
if (_mTypeEvents.TryGetValue(eType, out var e)) return (T)e;
|
||
|
||
// 如果不存在则创建新实例并添加到字典中
|
||
var t = new T();
|
||
_mTypeEvents.Add(eType, t);
|
||
return t;
|
||
}
|
||
} |