Динамическое приведение с Delphi для доступа к методам и свойствам - PullRequest
0 голосов
/ 25 января 2019

Как я могу добиться динамического приведения к созданному объекту, чтобы иметь доступ к его методам или свойствам.Предполагая, что класс объекта очень прост, с общедоступными методами и свойствами и т. Д.

У меня есть 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 включен в мой класс, который я кастую?

...