gpt4 book ai didi

Delphi:在运行时查找从给定基类派生的类?

转载 作者:行者123 更新时间:2023-12-03 14:45:19 25 4
gpt4 key购买 nike

是否有办法在运行时查找从特定基类派生的所有类?

例如,假设有一个类:

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;

另请参阅

最佳答案

可以使用 RTTI 来完成,但不能在 Delphi 5 中完成。为了查找符合特定条件的所有类,您首先需要能够查找所有类,以及 RTTI API Delphi 2010 中引入了执行此操作所需的必要操作。您可以这样做:

function FindAllDescendantsOf(basetype: TClass): TList<TClass>;
var
ctx: TRttiContext;
lType: TRttiType;
begin
result := TList<TClass>.Create;
ctx := TRttiContext.Create;
for lType in ctx.GetTypes do
if (lType is TRttiInstanceType) and
(TRttiInstanceType(lType).MetaclassType.InheritsFrom(basetype)) then
result.add(TRttiInstanceType(lType).MetaclassType);
end;

关于Delphi:在运行时查找从给定基类派生的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com