using System; namespace TEngine { /// /// 对象基类。 /// public abstract class ObjectBase : IMemory { private string _name; private object _target; private bool _locked; private int _priority; private DateTime _lastUseTime; /// /// 初始化对象基类的新实例。 /// public ObjectBase() { _name = null; _target = null; _locked = false; _priority = 0; _lastUseTime = default(DateTime); } /// /// 获取对象名称。 /// public string Name => _name; /// /// 获取对象。 /// public object Target => _target; /// /// 获取或设置对象是否被加锁。 /// public bool Locked { get => _locked; set => _locked = value; } /// /// 获取或设置对象的优先级。 /// public int Priority { get => _priority; set => _priority = value; } /// /// 获取自定义释放检查标记。 /// public virtual bool CustomCanReleaseFlag => true; /// /// 获取对象上次使用时间。 /// public DateTime LastUseTime { get => _lastUseTime; internal set => _lastUseTime = value; } /// /// 初始化对象基类。 /// /// 对象。 protected void Initialize(object target) { Initialize(null, target, false, 0); } /// /// 初始化对象基类。 /// /// 对象名称。 /// 对象。 protected void Initialize(string name, object target) { Initialize(name, target, false, 0); } /// /// 初始化对象基类。 /// /// 对象名称。 /// 对象。 /// 对象是否被加锁。 protected void Initialize(string name, object target, bool locked) { Initialize(name, target, locked, 0); } /// /// 初始化对象基类。 /// /// 对象名称。 /// 对象。 /// 对象的优先级。 protected void Initialize(string name, object target, int priority) { Initialize(name, target, false, priority); } /// /// 初始化对象基类。 /// /// 对象名称。 /// 对象。 /// 对象是否被加锁。 /// 对象的优先级。 protected void Initialize(string name, object target, bool locked, int priority) { if (target == null) { throw new GameFrameworkException(Utility.Text.Format("Target '{0}' is invalid.", name)); } _name = name ?? string.Empty; _target = target; _locked = locked; _priority = priority; _lastUseTime = DateTime.UtcNow; } /// /// 清理对象基类。 /// public virtual void Clear() { _name = null; _target = null; _locked = false; _priority = 0; _lastUseTime = default(DateTime); } /// /// 获取对象时的事件。 /// protected internal virtual void OnSpawn() { } /// /// 回收对象时的事件。 /// protected internal virtual void OnUnspawn() { } /// /// 释放对象。 /// /// 是否是关闭对象池时触发。 protected internal abstract void Release(bool isShutdown); } }