Можете ли вы иметь функцию класса, которая создает экземпляр класса:
TMyClass = class(TSomeParent)
public
class function New(AValue : integer) : TMyClass;
end;
TDerivedClass = class(TMyClass)
public
function Beep;
end;
, а затем использовать ее следующим образом
...
var
myList : TList<T>;
item : TDerivedClass;
begin
myList.Add(TDerivedClass.New(1))
myList.Add(TDerivedClass.New(3))
myList.Add(TDerivedClass.New(5))
for item in myList do
item.Beep; //times the count in the class function
...
И если да, то что это делает код функции похож? Используете ли вы метод NewInstance TObject и повторно реализуете ли вы каждый раз для каждого производного класса? Можно ли сэкономить / лучше использовать конструктор?
Цель состоит в том, чтобы использовать этот подход в шаблоне команд и загрузить список команд с типами классов и получателем, например:
//FYI: document is an instance of TDocument
commandList.Execute(TOpenDocument(document));
commandList.Execute(TPasteFromClipboard(document));
//... lots of actions - some can undo
commandList.Execute(TPrintDocument(document));
commandList.Execute(TSaveDocument(document));
Причина в том, что некоторые команды будут должны быть указаны с помощью текста / сценария и должны быть разрешены во время выполнения.