У меня есть класс TTask, из которого я выводим многие другие задачи:Как создать «открытый» список классов?
TTask= class(TObject)
TaskName: string;
TaskDescription: string;
end;
TTask1= class(TTask)
TTask2= class(TTask)
TParser= class(TTask)
etc...
(each class implemented in its own unit)
Каждый ребенок задача имеет свое собственное название и описание:
constructor TParser.Create;
begin
inherited;
TaskName := 'Parser';
TaskDescript:= 'Parses a result file';
end;
ГИП:
Во время выполнения я хочу, чтобы заполнить список списка с названием «Доступные задачи» с именем TTask1, TTask2 и т. д. Я хочу, чтобы пользователь перетаскивал задачи из «Доступные» в список «Текущие задачи».
При заполнении доступного списка во время выполнения, поскольку TTask1, TTask2 не создаются, вероятно, было бы разумно использовать что-то вроде класса var для получения TaskName. В противном случае, если я когда-либо изменю имя задачи, мне придется изменить код в двух местах.
Если возможно, я должен быть в состоянии легко добавить дополнительные задачи в поле «Доступные», когда я закончу код для них.
Каков наилучший способ сделать такой динамический дизайн?
Что мне не нравится в основном это дизайн:
var Task: TTask;
...
if lstAvailTasks.SelectedItem= 'Parser' then
begin
Task:= TTask1.Create;
Tasks.Add(Task)
end
else
etc
Зарегистрируйте каждый класс задач на заводе (раздел 'initialization' устройства является идеальным местом). – TLama
Регистрация подразумевает добавление их в список, словарь и т. Д. –