我通过了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.ClassType
在lObj as lObj.ClassParent
之后不会更改。有人可以解释为什么这行不通并提供行之有效的东西吗?*这似乎起作用,因为它使lObj.ClassType成为父级的类,但是这会导致问题,后来我阅读了文档,发现甚至不应该首先调用它。
最佳答案
您只需要对类类型进行循环。
lObj := aObject.ClassType;
while ....
...
lObj := lObj.ClassParent;
end;
有关示例,请参见文档:ClassParent。