直接枚举很难,子类可以得到父类的信息,但父类是不知道它有没有子类和子类的信息的,RTTI中类的信息的确有类所在单元名称,但好象还没有获得某个单元所有类信息的函数或方法。
我觉得,既然是你自己写的单元,那么不妨自己维护一个该单元类继承结构的树状列表,如:
var
ClassesList: TStringList;
function GetClassChilds(const ClassName: string
List: TStrings): TStrings;
var
I: Integer;
begin
I := List.IndexOf(ClassName);
if I >= 0 then
begin
Result := TStrings(List.Objects);
Exit;
end;
for I := 0 to List.Count - 1 do
begin
Result := GetClassChilds(ClassName, TStrings(List.Objects));
if Result <> nil then Exit;
end;
Result := nil;
end;
procedure FreeClassesList(List: TStrings);
var
I: Integer;
begin
for I := 0 to List.Count - 1 do
FreeClassesList(TStrings(List.Objects));
List.Free;
end;
initialization
ClassesList := TStringList.Create;
ClassesList.Sorted := True;
ClassesList.AddObject('TA', TStringList.Create);
with TStringList(ClassesList[0]) do
begin
Sorted := True;
AddObject('TB', TStringList.Create);
AddObject('TC', TStringList.Create);
end;
finalization
FreeClassesList(ClassesList);
end.
代码随手写的,没有测试过,你自己试一下看看。