Как получить ссылку на тип класса по его имени в Delphi XE? - PullRequest
5 голосов
/ 20 октября 2011

Я на самом деле пытаюсь использовать Rtti для реализации универсального метода вызова.Он должен работать следующим образом:

  • Я предоставлю имя класса, имя метода и аргументы
  • , вызывающий будет выполнять свою работу, вызывая указанный метод этого класса

Так что мне нужна ссылка на класс, чтобы получить информацию Rtti и найти метод, который я хочу вызвать.

Есть ли способ сделать это без реализации списка ссылок на классыклассы, с которыми я хочу работать?

1 Ответ

8 голосов
/ 20 октября 2011

Чтобы получить ссылку на класс по его имени, вы должны использовать функцию TRttiContext.FindType, передавая Имя класса и извлекая экземпляр, используя свойство AsInstance, а затем Вы можете вызвать конструктор класса.

var
  Instance : TRttiInstanceType;
  ctx : TRttiContext;
  mClass : TValue;
begin
  ctx := TRttiContext.Create;   
  Instance := ctx.FindType(ClassName).AsInstance; //ClassName is something like  'Classes.TStringList';
  mClass := Instance.GetMethod('Create').Invoke(Instance.MetaclassType,[]);

   //do your stuff here


end;
...