使用 RTTI 获取单元中定义的类和对象的完整列表

Vib*_*nRC 4 delphi rtti delphi-xe2

  1. 我想获取特定单元中定义的类的完整列表
  2. 如何获取这些类的所有实例的列表,无论它们是在哪里创建的?

RRU*_*RUZ 5

首先,在回答您的问题之前,请记住始终在与 Rtti 相关的问题中包含您的 delphi 版本。

1)假设您使用的是新版本的delphi(> = 2010),您可以使用属性获取类型的单元名称QualifiedName,从那里您必须检查属性IsInstance以确定是否是一个类。

检查下一个样本。

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Rtti,
  System.SysUtils;

procedure Test;
Var
 t : TRttiType;
  //extract the unit name from the  QualifiedName property
  function GetUnitName(lType: TRttiType): string;
  begin
    Result := StringReplace(lType.QualifiedName, '.' + lType.Name, '',[rfReplaceAll])
  end;

begin
 //list all the types of the System.SysUtils unit
  for t in TRttiContext.Create.GetTypes do
   if SameText('System.SysUtils',GetUnitName(t)) and (t.IsInstance) then
     Writeln(t.Name);
end;

begin
  try
    Test;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

2) Rtti 无法列出类的实例。因为 Rtti 是关于类型信息而不是实例信息。