是否可以创建一个在其中创建新对象的通用对象池?另外,如果这个对象创建可以接收参数,那就太好了。
public interface IPoolable
{
void Dispose();
}
public class ObjectPool<T> where T : IPoolable
{
private List<T> pool;
public T Get()
{
if(pool.count > 0)
{
return pool.Pop();
}
else
{
return new T(); // <- How to do this properly?
}
}
}
public class SomeClass : IPoolable
{
int id;
public SomeClass(int id)
{
this.id = id;
}
public void Dispose()
{
}
}
public class OtherClass : IPoolable
{
string name;
int id;
public OtherClass(string name, int id)
{
this.name = name;
this.id = id;
}
public void Dispose()
{
}
}
如果它可以接收参数,它可以像这样使用。
SomeClass a = myPool.Get(2);
OtherClass b = myOtherPool.Get("foo", 4);
或者,如果无法提供参数,这也可以。
SomeClass a = myPool.Get();
a.id = 2;
OtherClass b = myOtherPool.Get();
b.name = "foo";
b.id = 4;