向一个外部类插入属性
向一个外部类插入属性
假设我们有如下 Unit
类,仅有一个 name
字段
public class Unit
{
public string name;
}
此时我们有一个需求,所有
Unit
都希望有一个position
字段
Unit
类可能因为各种原因无法扩展,比如在 dll
里、package
里,或者你本身不希望侵入 Unit
类进行新字段的增加,此时为了解决这个问题,我们有如下定义
public record Transform(Vector3 position);
public static class UnitEx
{
private static readonly ConditionalWeakTable<Unit, Transform> _DATA = new();
public static void AddTransform(this Unit self, Vector3 position)
{
_Data.Add(self, new Transform(position));
}
public static bool TryGetTransform(this Unit self, out Transform trans)
{
return _DATA.TryGetValue(self, out trans);
}
}
这里的 ConditionalWeakTable
用法和 Dictionary
基本一致,但多了一个功能,当 Unit
被 GC 回收后,此处的 Unit
key 也同样会被回收
这种设计思路对于 ET 组件化设计框架来说,增加了很多便利性,有时候我们将业务拆分时,部分属性并不希望设计成一个 Entity
,此时就可以使用这种方式,在不破坏原有结构的前提下,增加新的字段
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果