Delphi Rtti:探索接口的属性?

Chr*_*ler 9 delphi interface rtti

有没有办法用Rtti探索界面的属性?

以下代码不起作用:

procedure ExploreProps;
var
  Ctx: TRttiContext;
  RttiType: TRttiType;
  RttiProp: TRttiProp;
begin
  RttiType := Ctx.GetType(TypeInfo(IMyInterface));
  for RttiProp in RttiType.GetProperties do
    Writeln(RttiProp.ToString);
end;
Run Code Online (Sandbox Code Playgroud)

有没有人解决方法如何正确地做到这一点?

Mas*_*ler 5

接口是函数的集合.它们并不像对象那样具有属性; 这只是编译器为您添加的一些语法糖,以便更容易为它们编写代码.区别在于对象,属性允许对私有和受保护成员的受控访问,而在接口上,所有成员都是公共的,因此不需要属性.

  • @Christian:我刚看了RTTI系统的代码,标准库中的很多接口都没有为它们生成RTTI.我不确定为接口类型生成扩展RTTI的规则是什么,因为它似乎与为类或记录生成扩展RTTI不同.也许Barry Kelly或Allen Bauer可以回答这个问题吗? (4认同)