Короткая версия:
Как мне создать пул объектов, в котором можно хранить классы разных типов, все производные от одного базового класса?
Ниже приведен пример ожидаемого использования.
Длинная версия:
У меня есть класс BaseComponent
, со многими производными классами, например, Child1Component
, Child2Component
.
У меня также есть другой объект, представляющий коллекцию этих компонентов, в свойствах которых установлены конкретные значения. Я называю это EntityTemplate
, поскольку сущность определяется набором компонентов и их значений.
Я хочу создать сущности на основе компонентов сущностей. Чтобы сделать это в настоящее время, я получаю соответствующий EntityTemplate
, перебираю его различные компоненты и вызываю метод Clone
, который я определил для каждого дочернего класса. У меня также есть определенный метод Copy
, который может быть полезен.
Когда срок действия сущности истекает, я хотел бы добавить ее компоненты в пул объектов, затем, когда мне в следующий раз понадобится создать сущность, я получу шаблон сущности, и для каждого компонента я получу один и тот же тип. пула и установите его свойства равными свойствам в EntityTemplate
, что-то вроде ниже:
// What i want to do
var entityTemplate = GetTemplate("UniqueString");
var MyActualEntity = new Entity();
foreach(var componentTemplate in entityTemplate)
{
var actualComponent = MagicComponentPool
.GetComponentSameTypeAsParam(componentTemplate);
actualComponent.CopyFrom(componentTemplate);
MyActualEntity.Components.Add(actualComponent);
}