using System; namespace TEngine { /// /// 对象池基类。 /// public abstract class ObjectPoolBase { private readonly string _name; /// /// 初始化对象池基类的新实例。 /// public ObjectPoolBase() : this(null) { } /// /// 初始化对象池基类的新实例。 /// /// 对象池名称。 public ObjectPoolBase(string name) { _name = name ?? string.Empty; } /// /// 获取对象池名称。 /// public string Name => _name; /// /// 获取对象池完整名称。 /// public string FullName => new TypeNamePair(ObjectType, _name).ToString(); /// /// 获取对象池对象类型。 /// public abstract Type ObjectType { get; } /// /// 获取对象池中对象的数量。 /// public abstract int Count { get; } /// /// 获取对象池中能被释放的对象的数量。 /// public abstract int CanReleaseCount { get; } /// /// 获取是否允许对象被多次获取。 /// public abstract bool AllowMultiSpawn { get; } /// /// 获取或设置对象池自动释放可释放对象的间隔秒数。 /// public abstract float AutoReleaseInterval { get; set; } /// /// 获取或设置对象池的容量。 /// public abstract int Capacity { get; set; } /// /// 获取或设置对象池对象过期秒数。 /// public abstract float ExpireTime { get; set; } /// /// 获取或设置对象池的优先级。 /// public abstract int Priority { get; set; } /// /// 释放对象池中的可释放对象。 /// public abstract void Release(); /// /// 释放对象池中的可释放对象。 /// /// 尝试释放对象数量。 public abstract void Release(int toReleaseCount); /// /// 释放对象池中的所有未使用对象。 /// public abstract void ReleaseAllUnused(); /// /// 获取所有对象信息。 /// /// 所有对象信息。 public abstract ObjectInfo[] GetAllObjectInfos(); internal abstract void Update(float elapseSeconds, float realElapseSeconds); internal abstract void Shutdown(); } }