Да, это возможно.Словарь - это удобный способ хранить пары значений ключей с помощью поиска O (1), а Activator
способен создавать экземпляры типа, известного только во время выполнения:
private IDictionary<string, object> _objectPool;
object RetriveFromPool(string typeName)
{
if(_objectPool.ContainsKey(typeName))
{
return _objectPool[typename]; // return from the pool
}
return Activator.CreateInstance(Type.GetType(typeName)); // Try to create a new object using the default constructor
}
В качестве альтернативы (для обеспечения времени компиляции)проверка типа) вы можете использовать дженерики для достижения этой цели:
private IDictionary<Type, object> _objectPool;
public T RetrieveFromPool<T>() where T : new()
{
Type type = typeof(T);
return _objectPool.ContainsKey(type) ? (T)_objectPool[type] : new T();
}
// Update - add a couple of templates for add methods:
public void AddToPool<T>() where T : new
{
_objectPool[typeof(T)] = new T();
}
public void AddToPool<T>(T poolObject) where T : new
{
_objectPool[typeof(T)] = poolObject;
}