如何在Delphi中为比较创建类名数组?

use*_*419 0 delphi class

我正在使用Delphi.我有一个根类和许多派生类从根,类的名称说TROOT,TA,TB,TC ...在代码中,我有一些代码通过以下代码控制程序的流程

var
  obj :TROOT;
begin
  if ((obj is TA) or (obj is TB) or (obj is TC) or (obj is TD)) then
  begin
    // some other codes here
  end
end;
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好,但随后我扩展了我的代码,因此更多的子类是从TROOT派生出来的,并且swtich出现在程序的多个位置.有没有什么办法可以把类类型放到一个集合或数组中,并有一些psudeo代码,如下所示,所以我不必在代码扩展时随处修改?

classarray = {TA, TB, TC, TD, TE, TF};
if (obj in classarray) then
begin
  // put my code here
end
Run Code Online (Sandbox Code Playgroud)

谢谢.

Rob*_*edy 5

您当然可以将类放在数组中.声明这样的类型:

type
  TRootClass = class of TRoot;
  TRootClassArray = array of TRootClass;
Run Code Online (Sandbox Code Playgroud)

声明并填充数组:

var
  RootClasses: TRootClassArray;

SetLength(Classes, 4);
RootClasses[0] := TA;
RootClasses[1] := TB;
RootClasses[2] := TC;
RootClasses[3] := TD;
Run Code Online (Sandbox Code Playgroud)

然后你可以测试数组的内容:

var
  c: TRootClass;

for c in RootClasses do
  if obj is c then
    // ...
Run Code Online (Sandbox Code Playgroud)