如何才能对创建的对象进行动态转换,以访问其方法或属性。假设对象的类非常简单,具有公共方法和属性等。
我有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吗?