Функция класса, которая создает свой экземпляр в Delphi

Можете ли вы иметь функцию класса, которая создает экземпляр класса:

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));

Причина в том, что некоторые команды будут должны быть указаны с помощью текста / сценария и должны быть разрешены во время выполнения.

7
задан MX4399 28 September 2011 в 21:18
поделиться