How to convert classname as string to a class?

后端 未结 4 1935
春和景丽
春和景丽 2021-01-03 03:42

I have classnames in a stringlist. For example it could be \'TPlanEvent\', \'TParcel\', \'TCountry\' etc.

Now I want to find out the sizes by looping the list.

4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-03 04:20

    In Delphi 2010 you can use:

    function StringToClass(AName: string): TClass;
    var
      LCtx: TRttiContext;
      LTp: TRttiType;
    begin
      Result := nil;
    
      try
        LTp := LCtx.FindType(AClassName);
      except
        Exit;
      end;
    
      if (LTp <> nil) and (LTp is TRttiInstanceType) then
        Result := TRttiInstanceType(LTp).Metaclass;
    end;
    

    One note. Since you only keep the class names in the list this method will not work because TRttiContext.FindType expects a fully qualified type name (ex. uMyUnit.TMyClass). The fix is to attach the unit where you store these classes in the loop or in the list.

提交回复
热议问题