如何解决在Delphi 10.3.3中使用RTTI收集类的所有后代
对于基本TClass的所有后代,我都需要TClass。
我尝试了以下代码:
type
TClassList = TList<TClass>;
class procedure TClassUtility.collectDescendantClasses( ancestorClass_ : TClass; descendantClasses_ : TClassList );
var
ctx: TRttiContext;
list : TArray<TRttiType>;
typ: TRttiType;
begin
if ( descendantClasses_ <> NIL ) then
begin
ctx := TRttiContext.Create;
try
list := ctx.GetTypes;
for typ in list do
begin
if ( typ.TypeKind = tkInstance ) then
if ( ( ancestorClass_ = NIL ) or ( typ.ClassType.InheritsFrom( ancestorClass_ ) ) ) then
descendantClasses_.Add( typ.ClassType );
end;
finally
ctx.Free
end;
end else
raise Exception.Create('' );
end;
它什么也不收集。所有列表项的typ.ClassType.QualifiedClassName
始终为TRTTIInstanceType
。 typ.QualifiedName
存储正确的类型名称。但是,如果TClass
是记录本身,我如何访问称为typ.QualifiedName
的{{1}}?
我无法使用Delphi帮助弄清楚。
解决方法
您需要查看SANCTUM_STATEFUL_DOMAINS="localhost,127.0.0.1"
SESSION_DOMAIN=".sanctum.local"
是否为TRttiInstanceType
类型,是否可以访问其MetaclassType
属性:
typ
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。