1

我正在开发一个适用于多个类的组件。为了允许添加托管类列表,我编写了一个 TCollection 的继承类,其中每个项目(从 TCollectionItem 继承)定义了一个已发布的“TargetClassName”属性。“TargetClassName”属性的 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在 Delphi 中按名称编写函数 Get 类)。

现在,我想知道是否有更好的方法允许在设计时向 TCollectionItem 添加类。你怎么看?希望阅读有趣的解决方案!谢谢大家。

4

1 回答 1

0

在 TCollection 上创建时,您需要以两种方式引入 Collat​​ion Class 1:在创建时硬编码 X := TMycollat​​ion.Create(TMyCollat​​ionClass) 2:您的解决方案 X := TMycollat​​ion.Create(FindAnyClass('TMyCollat​​ionClass'));

于 2015-04-12T11:47:22.903 回答