可以在 Type2 的对象上调用从 Type1 获取的 Rtti 方法
Rtti method got from Type1 can be invoked on object of Type2
我有以下程序。
procedure TForm1.Button1Click(Sender: TObject);
begin
var con: TRttiContext;
var meth := con.GetType(TButton).GetMethod('Click');
meth.Invoke(BitBtn1, []);
end;
BitBtn1
是一个 TBitBtn。如您所见,meth
是从类型TButton
获得的方法对象。但是,根据我的测试,它可以毫无问题地针对 TBitBtn 调用。这是预期的吗?
您发布的 RTTI 有效,因为 TBitBtn
和 TButton
共享一个实现 Click
方法的共同祖先 (TCustomButton
)。
如果您使用的两种类型不是实现相同方法的祖先的后代,例如 TEdit
和 TMemo
,代码将失败。两者都允许您输入文本,但 TMemo
具有 属性 Lines
。 TEdit
不会,这会导致您发布的代码失败。
我有以下程序。
procedure TForm1.Button1Click(Sender: TObject);
begin
var con: TRttiContext;
var meth := con.GetType(TButton).GetMethod('Click');
meth.Invoke(BitBtn1, []);
end;
BitBtn1
是一个 TBitBtn。如您所见,meth
是从类型TButton
获得的方法对象。但是,根据我的测试,它可以毫无问题地针对 TBitBtn 调用。这是预期的吗?
您发布的 RTTI 有效,因为 TBitBtn
和 TButton
共享一个实现 Click
方法的共同祖先 (TCustomButton
)。
如果您使用的两种类型不是实现相同方法的祖先的后代,例如 TEdit
和 TMemo
,代码将失败。两者都允许您输入文本,但 TMemo
具有 属性 Lines
。 TEdit
不会,这会导致您发布的代码失败。