我通过了TObject。我知道该对象来自TBaseClass。我要做的是显示直到TBaseClass为止每个类的所有已发布属性。可能有更好的方法可以做到这一点,但是我正在尝试的是:

lObj := aObject;
while lObj.ClassType <> TBaseClass do
begin
  lRttiType := lRttiContext.GetType(aObject.ClassType);
  lProps := lRttiType.GetDeclaredProperties;

  lStartIdx := Length(lAllProps);
  SetLength(lAllProps, Length(lAllProps) + Length(lProps));

  for I := Low(lProps) to High(lProps) do
    lAllProps[lStartIdx + I] := lProps[I];

  lObj := lObj as lObj.ClassParent;
  // lObj := lObj.ClassParent.InitInstance(lObj); // *see below
end;


这段代码的问题是lObj.ClassTypelObj as lObj.ClassParent之后不会更改。有人可以解释为什么这行不通并提供行之有效的东西吗?

*这似乎起作用,因为它使lObj.ClassType成为父级的类,但是这会导致问题,后来我阅读了文档,发现甚至不应该首先调用它。

最佳答案

您只需要对类类型进行循环。

lObj := aObject.ClassType;
while ....
  ...
  lObj := lObj.ClassParent;
end;


有关示例,请参见文档:ClassParent

09-18 09:26