Укороченный вариант:Один пул объектов содержат различные производные классы
Как бы я идти о создании объекта пула, который может хранить классы различных типов все производные от базового класса?
Ниже приведен пример ожидаемого использования.
Длинная версия:
У меня есть класс 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);
}
И реальные проблемы вы сталкиваетесь? –
Если пул объектов содержит список BaseClass, как мне найти экземпляр DerivedClass, который я хочу? Итерирование списка будет слишком медленным. –
Зачем медленно? Какое количество случаев вы думаете? Ответ на ваш вопрос в значительной степени зависит от внутренней работы «EntityTemplate» и «MagicComponentPool». Вы не узнали, как вы узнали отдельные компоненты. По типу? По каким-то идентификаторам? –