【发布时间】:2011-04-17 07:36:48
【问题描述】:
是否有办法在运行时找到从特定基类派生的所有类?
例如,假设有一个类:
TLocalization = class(TObject)
...
public
function GetLanguageName: string;
end;
或假装有一门课:
TTestCase = class(TObject)
...
public
procedure Run; virtual;
end;
或假装有一门课:
TPlugIn = class(TObject)
...
public
procedure Execute; virtual;
end;
或假装有一门课:
TTheClassImInterestedIn = class(TObject)
...
public
procedure Something;
end;
在运行时,我想找到所有来自TTestCase 的类,以便我可以对它们进行处理。
可以向 RTTI 查询此类信息吗?
备选方案: Delphi 有没有一种方法可以走每节课?然后我可以简单地调用:
RunClass: TClass;
if (RunClass is TTestCase) then
begin
TTestCase(RunClass).Something;
end;
另见
【问题讨论】:
-
问题可能是关于如何枚举应用程序拥有的所有对象
-
@rajeem_cariazo 我可以用多种方式表达这个问题。希望其中一个措辞能给我一个解决方案。
-
如果您提供的示例与您为什么要使用它有关,即您主要对所有 DUnit 测试用例类感兴趣,您当然可以简单地“遍历”DUnit 本身构建的 RegisteredTests 注册表运行所有测试。我现在看到您的 TTestCase 来自 TObject - 并且可能与 DUnit 没有关系,所以忘记我的评论。如果允许的话,我会删除它...