namespace IsoTools.Internal { public interface IsoIPool { T Take(); void Release(T item); } public abstract class IsoPool : IsoIPool { IsoList _items; public IsoPool(int capacity) { _items = new IsoList(capacity); } public T Take() { return _items.Count > 0 ? _items.Pop() : CreateItem(); } public void Release(T item) { CleanUpItem(item); _items.Add(item); } public abstract T CreateItem(); public virtual void CleanUpItem(T item) {} } }