public virtual void Recycle(ObjectsPoolEntry e)
        {
            Assert.IsInstanceOfType <T>(e);
            Assert.AreSame(this, e.pool);

            AddLastItem(e);
        }
 public override void Recycle(ObjectsPoolEntry e)
 {
     lock (this)
     {
         base.Recycle(e);
     }
 }
        public virtual T NextObject()
        {
            ObjectsPoolEntry first = RemoveFirstItem();

            if (first == null)
            {
                first = CreateObject();
            }

            first.pool     = this;
            first.recycled = false;

            return((T)first);
        }