using GFramework.Core.Abstractions.Utility; namespace GFramework.Game.Abstractions.Config; /// /// 定义配置表的非泛型公共契约,用于在注册表中保存异构配置表实例。 /// 该接口只暴露运行时发现和诊断所需的元数据,不提供具体类型访问能力。 /// public interface IConfigTable : IUtility { /// /// 获取配置表主键类型。 /// Type KeyType { get; } /// /// 获取配置项值类型。 /// Type ValueType { get; } /// /// 获取当前配置表中的条目数量。 /// int Count { get; } } /// /// 定义强类型只读配置表契约。 /// 运行时配置表应通过主键执行只读查询,而不是暴露可变集合接口, /// 以保持配置数据在加载完成后的稳定性和可预测性。 /// /// 配置表主键类型。 /// 配置项值类型。 public interface IConfigTable : IConfigTable where TKey : notnull { /// /// 获取指定主键的配置项。 /// /// 配置项主键。 /// 找到的配置项。 /// 当主键不存在时抛出。 TValue Get(TKey key); /// /// 尝试获取指定主键的配置项。 /// /// 配置项主键。 /// 找到的配置项;未找到时返回默认值。 /// 找到配置项时返回 true,否则返回 false bool TryGet(TKey key, out TValue? value); /// /// 检查指定主键是否存在。 /// /// 配置项主键。 /// 主键存在时返回 true,否则返回 false bool ContainsKey(TKey key); /// /// 获取配置表中的所有配置项快照。 /// /// 只读配置项集合。 IReadOnlyCollection All(); }