可以在 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 有效,因为 TBitBtnTButton 共享一个实现 Click 方法的共同祖先 (TCustomButton)。

如果您使用的两种类型不是实现相同方法的祖先的后代,例如 TEditTMemo,代码将失败。两者都允许您输入文本,但 TMemo 具有 属性 LinesTEdit 不会,这会导致您发布的代码失败。