namespace NBConfigBuilder; /// /// 静态的对象池系统,不支持多线程。 /// /// public static class Pool where T : IPool, new() { private static readonly Queue PoolQueue = new Queue(); /// /// 池子里可用的数量 /// public static int Count => PoolQueue.Count; /// /// 租借 /// /// public static T Rent() { return PoolQueue.Count == 0 ? new T() : PoolQueue.Dequeue(); } /// /// 租借 /// /// 如果池子里没有,会先执行这个委托。 /// public static T Rent(Func generator) { return PoolQueue.Count == 0 ? generator() : PoolQueue.Dequeue(); } /// /// 返还 /// /// public static void Return(T t) { if (t == null) { return; } PoolQueue.Enqueue(t); } /// /// 返还 /// /// 返还的东西 /// 返还后执行的委托 public static void Return(T t, Action reset) { if (t == null) { return; } reset(t); PoolQueue.Enqueue(t); } /// /// 清空池子 /// public static void Clear() { PoolQueue.Clear(); } }