我正在开发一个适用于多个类的组件。 为了允许添加托管类列表,我编写了一个TCollection的继承类,其中每个项目(继承自TCollectionItem)定义了已发布的" TargetClassName"属性。 " TargetClassName" property的setter函数,调用以下函数以找到相应的TClass:
function FindAnyClass(const Name: string): TClass;
var
ctx: TRttiContext;
typ: TRttiType;
list: TArray<TRttiType>;
begin
Result := nil;
ctx := TRttiContext.Create;
list := ctx.GetTypes;
for typ in list do
begin
if typ.IsInstance and (EndsText(Name, typ.Name)) then
begin
Result := typ.AsInstance.MetaClassType;
break;
end;
end;
ctx.Free;
end;
(感谢Dalija Prasnikar撰写函数Get class by its name in Delphi)。
现在,我想知道是否有更好的方法允许在设计时向TCollectionItem添加类。你怎么看待它? 希望阅读有趣的解决方案! 谢谢大家。
答案 0 :(得分:0)
您需要引入Collation类 它以两种方式存在 1:在创建时间硬编码X:= TMycollation.Create(TMyCollationClass) 2:你的解决方案X:= TMycollation.Create(FindAnyClass('TMyCollationClass'));