Как я могу добиться динамического приведения к созданному объекту, чтобы иметь доступ к его методам или свойствам.Предполагая, что класс объекта очень прост, с общедоступными методами и свойствами и т. Д.
У меня есть 3 модуля для 3 разных кадров, которые имеют общие процедуры.
unit frameTypeA;
type
TfrmTypeA = class(TFrame)
procedure doSomething(Sender: TObject);
end;
unit frameTypeB;
type
TfrmTypeB = class(TFrame)
procedure doSomething(Sender: TObject);
end;
unit frameTypeC;
type
TfrmTypeC = class(TFrame)
procedure doSomething(Sender: TObject);
end;
В какой-то момент в моем коде я создаю эти кадры динамически из всех вышеперечисленных типов.Поэтому я создаю некоторые кадры на основе TfrmTypeA или frameTypeB или frameTypeC.Это не важно для моего вопроса, но я держу все эти созданные кадры в списке.
// frame A
frame := frameTypeA.Create(Application);
// frame B
frame := frameTypeB.Create(Application);
// frame C
frame := frameTypeC.Create(Application);
Я пытаюсь понять, как использовать преимущества RTTI или других механизмов Delphi для достижения динамического приведения.Если я хочу выполнить метод с простым старомодным приведением, я могу сделать:
TfrmTypeA(tempFrame).doSomething;
И все работает отлично.Delphi IDE знает о методе из этого фрейма, и я легко могу использовать приведение для выполнения этого метода.
Теперь мой вопрос: если я получаю класс из фрейма, как я могу динамически привести этот класс и использоватьметод?
var
tempClass: TClass;
begin
tempClass:= tempFrame.GetClass;
end
Есть ли способ достичь чего-то подобного?
tempClass(tempFrame).DoSomething;
Чтобы Delphi узнал во время разработки, что DoSomething включен в мой класс, который я кастую?