public static IPool New <T>(Type type, Action <object> beforeInit) where T : IPool, new() { ObjectPool objectPool; IPool o = null; if (poolDict.TryGetValue(type, out objectPool)) { if (objectPool.objectQueue.Count > 0) { o = objectPool.objectQueue.Dequeue(); } } if (o == null) { o = Common.CreateInstance(type) as T; if (o != null) { beforeInit(o); o.Init(); } } else { beforeInit(o); o.Reset(); o.SetInPool(false); } return(o); }