首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法在delphi中通过名称实例化一个类?

在Delphi中,通过名称实例化一个类需要使用反射。以下是一个简单的示例,展示了如何使用反射实例化一个类:

  1. 首先,确保你已经在Delphi中启用了RTTI。
  2. 在Delphi中,使用TValue.From方法实例化一个类。
代码语言:delphi
复制
uses
  System.Rtti;

type
  TMyClass = class
  public
    procedure HelloWorld;
  end;

procedure TMyClass.HelloWorld;
begin
  WriteLn('Hello, World!');
end;

var
  MyClassInstance: TMyClass;
  Context: TRttiContext;
  MyClassType: TRttiInstanceType;
  MyClassMethod: TRttiMethod;
begin
  MyClassType := Context.GetType(TMyClass) as TRttiInstanceType;
  MyClassInstance := MyClassType.GetMethod('Create').Invoke(MyClassType.AsInstance.MetaclassType, []).AsObject as TMyClass;

  MyClassMethod := Context.GetType(TMyClass).GetMethod('HelloWorld');
  MyClassMethod.Invoke(MyClassInstance, []);
end.

在这个示例中,我们首先获取了TMyClassTRttiInstanceType,然后使用GetMethod方法获取Create方法并调用它来创建一个TMyClass实例。接下来,我们使用GetMethod方法获取HelloWorld方法并调用它。

请注意,这个示例仅适用于具有无参数构造函数的类。如果你需要使用带参数的构造函数,你需要修改代码以传递适当的参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

可以一个里声明并实例自身?

/// 有了自定义的构造函数,就不会自动生成默认无参构造函数,在别处使用Atom atom = new Atom();就会报错 /// 这是私有的构造函数,说明只能在Atom实例...Atom的对象,也就是静态构造函数new出对象, /// 那么,其他地方要用Atom对象的话,就直接读上面那几个Atom对象就OK,别去每用一次Atom对象就new一次...也就是创建的第一个实例或引用的任何静态成员之前 /// static Atom() { C = new...答:此时Atom有一个属性是c ,而c是Atom的,则属性a作为对象,也有一个属性c,所以当Atom实例后,每个属性c都会包含属性c,这样不断递归下去,直到堆溢出。...m_next.ToString() : null); } } //Main调用SameDataLinkedList(),输出:ABC

1.2K20
  • Delphi类型和引用

    Delphi,所 有的都是从一个共同的TObject继承下来的,TObject的声明System单元,它定义了一些操纵 的最基本的方法,因此,Tobject也被称为缺省祖先。...消息句柄,您还可以调用缺省的消息句柄,例如上例,您声明了一个处理WM_PAINT消息的 方法,事实上Delphi提供了处理这个消息的缺省的句丙,不过句柄的名称可能与您声明的方法名称不一 样,也就是说您未必知道缺省句柄的名称...抽象方法C++称为虚函数,至少含有一个虚函数的称为抽象,抽象不能建立对象实例。...只读的属性Delphi是常见的,只读的 属性不能被修改。 Store子句用于指定一个布尔表达式,通过这个布尔表达式的值来控制属性的存贮行为。注意,这 个子句只适用于非数组的属性。...Default子句用于指定属性的缺省,Delphi的对象观察器,您可能已经注意到大多的属性都有一 个缺省值,这些缺省值就是通过Default子句指定的。

    2.5K30

    delphi bpl插件系统开发

    ,这个预定义的名称其实是bpl实现了IPlugin的名称,这个名称我们可以通过修改bpl的名称或者同时发布一个配置文件来让容器获得.现在我们先暂时写死程序里,毕竟这个问题是个小问题 构建插件...对的,java下我们可以发布jar包,而jar包的通过xxx.xxx.xxx方式保证了的唯一性,java各种框架的配置文件90%都有class="xxx.xxx.xxx"之类的声明,而Spring...容器读入一个外部配置文件来确定每个接口的具体实现名称 载入bpl(bpl中注册了实现某接口的,以让宿主程序可以访问到) 通过rtti(类似java的反射)创建实例 将该实例...) 其中的IMisDriver就是mvc的TController,它负责协调整个系统,驱动系统工作起来.delphi它就是一个全局变量,任何单元都可以包含它,并访问它的功能,IMisDriver...,它的机制delphi特有,基于delphi我们能做的可能只有通过它来的最方便了 3.系统的设计对于哪怕是一个简单的系统来说,能更好的帮助你对产品有着更全面的思想.一定要做,那怕只是花两个圆呢.

    1.7K11

    sdfsdfsd_dsd cd

    delphi2010的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。...现在把我整理的结果奉献给大家,免得大家花时间研究这个。 另外,通过研究发现,DSConnectEventObject.ChannelInfo.Id 属性实际上是内存地址,并不是一个简单的数字。...解决办法是客户端传入用户名和密码,如果用户名和密码不正确,连接将被挂断。 客户端的SQLConnection1driver分类的username和password属性设置好用户名和密码。...Session 说明:这是delphi2010默认属性,也是delphi推荐设置。Session会为每个来自客户端的链接,建立一个线程来实例实例是什么概念呢?...就是这个线程把所有你将要用到的、函数等等都建立好了,等待你客户端直接使用。这个线程和实例并不释放,直到客户端中断连接。

    2K10

    Dart的语法详解系列篇(三)-- mixin入门详解一、继承歧义

    C++不支持显式的重复继承,因为没有办法限定要使用哪个超(例如:一个派生列表[class Dog : public Animal, Animal]中出现一个不止一次)。...C++还允许通过虚拟继承机制创建多个的单个实例(例如:Worker::Human和Musician::Human将引用相同的对象)。...Scala(可以用于大数据方面) Scala允许特性的多个实例通过层次结构和特征层次结构之间添加区别,可以实现多重继承。只能从单个继承,但是可以根据需要混合(mix-in)任意多的特性。...此外,Ada、Objective-C、c#、Delphi/Free Pascal、Java、Swift、PHP等语言允许接口的多重继承(Objective-C和Swift称为protocols(协议...然而,即使当多个接口声明相同的方法签名时,只要该方法继承链的任何位置实现(定义),它就会覆盖该方法在其上链的任何实现(它的超)。因此,继承链的任何给定级别上,任何方法最多只能有一个实现。

    1.8K10

    巨鲸音乐播放器 v3.0.1

    并且搜索功能搜到的歌曲不能直接添加到播放器,用播放列表的。目前我也没办法Google模式下是可以直接添加搜索到的歌曲的。自己选择方式把。我也没办法现在。呵呵。...☆文章版权声明☆ * 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《巨鲸音乐播放器 v3.0.1》 * 本文链接:https://h4ck.org.cn...---- 分享文章: 相关文章: 巨鲸音乐播放器 v4.0.1 User Agent Simulator v3.0 Castalia v2014.1.2 for Delphi 5-XE5 Opera...本地个人数据备份工具 Embarcadero.Delphi.XE2.RTM.v16.0.4256.43595.Lite.v5.0 Let them drag and drop files on your...program Google Music Player Beta v1.0 Delphi 记事本【有码有真相】 IP Sender [IP 发送者 ] beta 2 Delphi.2010.RTM

    29230

    CQRS讨论

    Web开发使用纯粹的DDD,还要保证不错的效率,是一个挑战!类似这个问题,我的这篇博客中有写。 我之前分享给大家的那个网站591jzw,就是朝着这个方向前进的。...但是,如果这样,我也有个比较大的问题:有些数据是经过业务逻辑计算出来的,如果把它的查询放在SQL,我觉得实在是有太舒服。这点有没有什么好的办法呢?...既然里面没有方法,只有Getter,Setter,那么和C里面的Struct,Delphi里面的Record使用上应该没有区别。...但是实现上,贫血模式是使用来实现,那么它的创建应该也是堆里进行,而Struct,Record都是栈里进行,堆和栈的效率应该是不同的,也就是说EJB是不是为了维持纯粹的面向对象的形式而不顾及效率?...同时,对于只有方法没有数据成员的静态的设计,这和全局函数应该在使用上没有不同,我知道Delphi的全局函数是直接引址,而方法(静态方法)应该不是直接引址吧,是不是也因为维持纯粹的面向对象的形式而不管性能了

    61970

    Python For D

    Python For Delphi搭建了Delphi和强大的脚本语言Python的桥梁,使用起来非常方便,让Delphi华丽的界面配合Python强大、简洁、稳定的后台逻辑处理能力,让应用程序模块清晰、...原来TPythonEngine初始的时候首先查找注册表中有没有对应的路径设置信息,如果有,则直接从注册表读取而不再执行OnPathInitialization,如TPythonEngine的RegVersion...它就去注册表查找是否有[HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/2.4/PythonPath],如果有直接读取,没有调用OnPathInitialization,OnPathInitialization...可以通过程序设置Python的库路径,设置成功后会写入注册表。...4、 自己写的Delphi程序,用TPythonEngine的OnPathInitialization事件设置Lib和DLLs的路径,并且将自己编写的模块所在的目录也加到路径

    1.3K20

    delphi 数据库连接池-Spring事务管理 | 数据库连接池流程原理分析

    bean的id //从IOC容器获取 bean 的实例 UserMapper userMapper = context.getBean("userMapper...读取配置文件,创建对象delphi 数据库连接池,是全局对象,为保证其应用全局唯一delphi 数据库连接池,要使用static进行初始   是操作数据库的核心对象,使用JDBC方式与数据库交互,...你可以通过 实例来直接执行已映射的 SQL 语句    SqlSession sqlSession = sessionFactory.openSession(true);   代码实现...,它会在初始的时候执行一次,执行完成便销毁,它仅能初始变量,即static修饰的数据成员 static { try {...//你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句 public static SqlSession getSqlSession(){ return

    49420

    技术笔记:Indy控件发送邮件

    解决中文乱码问题 写这个小程序最头痛的就是中文乱码问题,由于对这个组件不熟悉,找了半天也没找到办法解决。因为delphi早期版本一直都是基于ansi字符集,所以对于中文需要支持时就得专门处理。...解决这个问题办法也简单,那就把字符串转正特定的编码再发吧。 还好delphi里有个函数直接就用: AnsiToUtf8('中文革') 这样发过去的内容中文就可以显示了。...看了看网上的资料,就是使用另一个Indy可以实现TIdText。...后来在网上看到一篇文章才发现是indy的一个bug。链接 TIdSMTP是最终发送邮件的,发送的代码主要是它父TIdMessageClient实现。...这样就只要解决附件总大小就可以了,方法也简单,添加附件的时候计算一下文件长度然后保存在一个变量即可。OnWorkBegin的时候设置为进度条最大值就好了。

    1.5K50

    Delphi 教程

    它的重要方法有以下几个: Initialize:对全局程序进行初始.就比如说你有2个窗体,form1和form2,里面分别有1个全局变量,一般人们的理解上,这些全局变量form创建时才拥有实例...控件: 第一个重要的是actionlist。一般的编程语言,它的控件只有三个关键,属性,方法和事件,但是delphi还有一个动作 ,这就意味着它能更方便的处理复杂的事情。...delphi通过httprio控件,可以调用一切存在的webService。 第三个讲的是TCPServer和UDPServer。...一般的网络通信程序,将这2种协议放在一起用。单纯的发送信息用UDP,发送文件用TCP。它们的发送和接收方法都一样:通过SendBuffer进行发送 ,Adata.ReadBuffer进行接收。...实现部分用于实现接口部分的,也可以声明常量,变量或是引用单元,接口处引用和实现处引用的区别,就是接口引用没有实例,而实现引用有实例,并且接口处声明的常量,变量可被其他单元使用。

    1.9K11

    MarkdownPad 2 以及其他

    yaocoder曾经提供过一个网址支持md文件的在线编辑,但是我个人对于在线编辑没什么兴趣,并且大多数的时候md文件写好了也就直接扔到bitbucket了,所以也不需要在线保存。...VS2012还是蛮好的,但是不管什么样的东西总会有人不断的蹦出来说坏话,当然这个也确实没什么办法避免,众口难调。...当然.net的执行效率一向是个比较蛋疼的问题,但是固态硬盘上执行效率也可以忍受,其实对于工具的东西我还是喜欢向前看齐。没有必要守着那个老古董,如果机器跑的动的话。...虽然没有这个软件的私钥,没有办法作出keygen来,但是对于单纯的破解已经是绰绰有余了,甚至可以在此基础进行再次的开发了。也许老外一向比较实在吧,只是这样把源代码送出来还是比较少见的。...---- 分享文章: 相关文章: Delphi Tips Explorer 2007 v3.0 Ultimate Delphi CodeBank v1.8.8.0 AlphaControls 2013

    21330

    重温Delphi之:面向对象

    其实Pacscal发展到Delphi,已经完全具备了面向对象的所有特点:允许自定义可以继承(单继承),允许方法重载/覆写,可以定义接口,可以实现接口,允许定义静态方法(即class方法),虚方法...,抽象...等等,对于delphi怀有偏见的朋友,你还会怀疑delphi的面向对象能力吗?...下面是一些演示代码: 1.先定义一个TPeople unit UPeople; interface type   TPeople = class(TObject) private     ...,有点象c#的static静态方法  procedure ShowName;//公用实例方法     end; //实现部分 implementation procedure TPeople.Set_Name...  Writeln(aMan.ToString);//TMan实例的对象方法   Writeln('----------------------------------------');   aWoman

    73160

    delphi vcl_delphi数据类型

    10、GDI GDI(图形设备接口)Windows GUI应用程序起很大作用,这些封装了位图、字体、设备描述环境(DCs)、画笔和笔等应用,它可以通过这些GDI对象把图形和文本在窗口上显示出来...GDI一个具体的组件没有联系,但很多都有这些的属性实例。例如,编辑控件有一个属性叫Font,它是TFont实例。...TCanvas包含了其他GDI实例。例如,当做MoveTo/LineTo工作时,线是用当前画笔画的,Pen属性用来决定当前笔色,Pen属性是TPen一个实例。...除了这里列出的GDI以外,还有一些其他以后的Delphi学习过程,我们将会学习到更多有关这方面的,并掌握使用它们。...更多这些的详细信息请大家自己看看Delphi VCL Help。 这不是全部 讨论到这里并没有讨论到所有的VCL,但这里所涉及到的应用程序中用到的可能性很大。

    2.7K10
    领券