如何在Delphi XE中通过名称获取类类型引用?

发布于 2024-12-11 00:40:33 字数 193 浏览 0 评论 0原文

我实际上正在尝试使用 Rtti 来实现通用方法调用程序。它应该像这样工作:

  • 我将提供类名、方法名和参数,
  • 调用者将通过调用此类的指定方法来完成其工作

所以我需要类引用才能获取其 Rtti 信息并寻找我想调用的方法。

有没有办法在不实现我想要使用的类的类引用列表的情况下做到这一点?

I'm actually trying to use Rtti to implent a generic method invoker. It should work like this:

  • I'll provide the class name, method name, and arguments
  • the invoker will do its work by invoking the specified method of this class

So I need the class reference in order to get its Rtti information and seek for the method I want to invoke.

Is there any way to do that without implementing a class reference list of the classes I want to be working with?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆离笙 2024-12-18 00:40:33

要使用他的名字获取类引用,您必须使用 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;

To get the class reference using his name you must use the TRttiContext.FindType function passing the Name of the class and the retrieve the instance using the AsInstance property and then you can call the constructor of the class.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文