擴展的RTTI具有GetDeclaredProperties
函數,這正是我所需要的,但是如果我在多線程中使用擴展RTTI時遇到問題。可能只循環一個類的聲明屬性?
因此,我使用GetPropList
,但這給了我所有屬性的列表 - 不僅發佈在當前類(或明確聲明)。
即
TBaseSettings = class(TPersistent)
published
property Charset: string read FCharset write FCharset;
end;
TBasicSettings = class(TBaseSettings)
published
property forums: Variant read fforums write fforums;
end;
TConcreteSettings = class(TBasicSettings)
published
property forums; // <-- make it explicit visible: OK
property prefix: Variant read fprefix write fprefix; // <-- OK
end;
我不想讀字符集財產。
我的第一個猜測是使用的https://stackoverflow.com/a/1565686修改後的版本來檢查繼承,但實際上論壇屬性也繼承。
也許這對傳統的RTTI來說是不可能的?我使用的是德爾福2010.
使用GetDeclaredPropeties –
我最終更改了基類中的屬性代碼,我不希望稍後在GetPropList循環中將其標記爲* public *並且未發佈。這不是我想要存檔的東西,但是現在對我來說可行了:)感謝你*豎起大拇指* – geskill