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

Delphi中使用RTTI

概要 运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息。 RTTIDelphi的组件能够融合到IDE中的关键。它在IDE中不仅仅是一个纯学术的过程。...由于对象都是从TObject继承下来的,因此,对象都包含一个指向它们的RTTI的指针以及几个内建的方法。下面的表列出了TObject的一些方法,用这些方法能获得某个对象实例的信息。 ?...第一部分:关于as 和 is Object Pascal提供了两个运算符as和is,用它们通过RTTI能对对象进行比较和强制类型转换。 关键字as是类型转换的一种新的形式。...那么RTTI是如何表现自己的呢?你将发现, RTTI至少在两个地方对你有用。第一个地方是DELPHI的IDE,这在前面已提到过。通过RTTI,IDE就会知道你正在使用的对象和组件的任何事情。...在观看此例子之时,建议你看看typinfo.pas中的内容(DELPHI安装目录下/source/rtl/common/TypInfo.pas); 下面的例子主要分为两部分,界面上半部分,主要演示通过rtti

1.8K41

重温Delphi之:面向对象

任何一门语言,只要具备了"封装,继承,多态"这三项基本能力,不管其实现方式是直接或曲折、复杂或简洁,就可以称之为“面向对象”的语言。 Delphi当年的迅速走红,是以其RAD快速开发吸引程序员的目光。...这无疑是它最吸引人的优势,但同时也让人误以为delphi只是vb的高级版本,从而忽视了其面向对象的特性。...其实Pacscal发展到Delphi,已经完全具备了面向对象的所有特点:允许自定义类,类可以继承(单继承),允许方法重载/覆写,可以定义接口,类可以实现接口,允许定义静态方法(即class方法),虚方法...,抽象类...等等,对于delphi怀有偏见的朋友,你还会怀疑delphi的面向对象能力吗?...Writeln(aMan.Name);   Writeln(aMan.Sex);   aMan.ShowName; //通过继承得来的方法   Writeln(aMan.ToString);//TMan实例中的对象方法

70060
您找到你想要的搜索结果了吗?
是的
没有找到

检查Python对象

编程环境中的对象很象现实世界中的对象。实际的对象有一定的形状、大小、重量和其它特征。实际的对象还能够对其环境进行响应、与其它对象交互或执行任务。...计算机中的对象试图模拟我们身边现实世界中的对象,包括象文档、日程表和业务过程这样的抽象对象。 类似于实际的对象,几个计算机对象可能共享共同的特征,同时保持它们自己相对较小的变异特征。...当您有一个任意的对象(也许是一个作为参数传递给函数的对象)时,可能希望知道一些关于该对象的情况。在本节中,我们将向您展示如何让 Python 对象回答如下问题: 对象的名称是什么?...这是哪种类型的对象对象知道些什么? 对象能做些什么? 对象的父对象是谁? 名称 并非所有对象都有名称,但那些有名称的对象都将名称存储在其 __name__ 属性中。...dir' >>> __name__ # And now for something completely different '__main__' 模块拥有名称,Python 解释本身被认为是顶级模块或主模块

1.3K100

Delphi中利用StringList对象来记录动态生成的对象

StringList使用 在Delphi中,如果程序需要动态创建大量的对象,那么我们可以利用StringList对象来管理这些动态生成的对象。...具体步骤如下: ---- 1、创建StringList对象: OBJ := TStringList.Create; 2、保存动态生成的对象: OBJ.AddObject('标识','对象名'); 3、调用生成的对象...: (OBJ.Objects[序号/OBJ.IndexOf('标识')] as 对象类型).方法或属性 或: 对象类型(OBJ.Objects[序号/OBJ.IndexOf('标识')]).方法或属性...4、释放动态生成的对象: (OBJ.Objects[序号/OBJ.IndexOf('标识')] as 对象类型).Free; 对象类型(OBJ.Objects[序号/OBJ.IndexOf('标识')]...).Free; 释放对象后记得要删除StringList里对应的记录: OBJ.Delete(序号/OBJ.IndexOf('标识')); 5、StringList的释放: if Assigned(OBJ

1.4K30

【专业技术】C++ RTTI及“反射”技术

RTTI   RTTI(Run-Time Type Information)运行时类型检查的英文缩写,它提供了运行时确定对象类型的方法。...面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持。...一些面向对象专家在传播自己的设计理念时,大多都主张在设计和开发中明智地使用虚拟成员函数,而不用 RTTI 机制。但是,在很多情况下,虚拟函数无法克服本身的局限。...为了使用 RTTI 来动态定制菜单,文件管理必须侦测每个文件的动态类型。利用 运算符 typeid 可以获取与某个对象关联的运行时类型信息。typeid 有一个参数,传递对象或类型名。...因此,当用户在该类文件图标上单击右键时,文件管理必须提供一个“播放”菜单。可惜 build()成员函数会调用失败,原因是你没有检查这种特定的文件类型。

2.1K50

VerilogSV代码检查-Lint 建模规则检查与 Verilator

Verilog/SV代码检查-Lint 建模规则检查与 Verilator 绪论 硬件设计是无情的,因此使用可以获得的任何错误的软件都是值得的。...在进行综合之前,简单的检查自己代码的一些潜在问题,有助于减少后续调整的时间。...Verilator是一个 Verilog 仿真和 C++ 编译,它还支持 linting:静态分析设计问题(代码校验工具)。...apt update apt install verilator 在 macOS 上,可以通过Homebrew包管理进行安装: brew install verilator linting 使用...Linting Shell 脚本 如果有许多顶级模块或包含很多目录,可以使用 Makefile 或简单的 shell 脚本自动检查。 以下 shell 脚本检查位于同一目录中的所有顶级模块: #!

3.2K30

Nebula3 RTTI 小技巧

另外, 因为我没有通过编译运行这些代码, 不保证有些手误. 不要把RttiRTTI搞混: Rtti 是类名, MyClass::RTTI 是类的Rtti对象的名字....检查一个对象是否为特定类或者其派生类: 这是Nebula3 RTTI系统的标准特性, 可以检查一个对象是否可以安全地转换为特定类接口: // check whether obj is instance...(FourCC(‘OTHR’))… 你可以检查两个Rtti对象是否相等: const Rtti& otherRtti = …; if (MyClass::RTTI == otherRtti)…...另一个问题就是有些类没有在程序启动时注册, 因为它的静态RTTI对象的构造方法被链接(linker)给”优化没了”. 这通常是因为没有实际的C++代码直接用到这个类....例如一个对象只通过类名(或FourCC)进行创建并且只通过虚函数进行访问. 这种条件下, 链接会完全地抛弃这个类的.obj单元, 因为外部没有调用到这个对象单元.

27020

MySQL Shell系列——升级检查

在这一篇文章里,将为读者介绍升级检查。 用户可以使用升级检查检查MySQL 5.7服务实例,以及MySQL 8.0服务实例与最新MySQL 8.0版本的兼容性错误和升级问题。...升级检查可以检查服务实例的配置文件(my.cnf或my.ini)。...如果存在现有的配置文件中已经定义,但在目标服务版本中被删除的任何系统变量,或者现有的配置文件中没有定义,但在目标MySQL服务版本中具有不同默认值的任何系统变量。升级检查将列出相关信息。...升级检查可以生成默认格式的输出,也可以生成JSON格式的输出,使用JSON格式可能更容易进行自动化的解析和处理。...从输出报告可以看出,升级检查在21个方面进行了检查,最终得出一个警告信息和一个提示。

1.1K10

Java--运行期类型鉴定(RTTI

这是 RTTI 最基本的形式,因为在 Java 中,所有造型都会在运行期间得到检查,以确保其正确性。那正是RTTI 的意义所在:在运行期,对象的类型会得到鉴定。 ...如果我们需要找出所有的圆并填充蓝色,就要使用RTTI技术用它查找某个Shape句柄到底是什么类型。 Class对象: 理解RTTI 的工作原理要先了解Class对象。 ...TYPE 字段的作用是为相关的基本数据类型产生 Class 对象的一个句柄,如下所示: 造型前的检查: 静态检查:instanceof关键字 动态检查:isInstance()方法 关键字instanceof...利用newInstance(),我们可在没有现成对象供“克隆”的情况下新建一个对象。 用 newInstance()创建的类必须有一个默认构建。...没有办法用 newInstance()创建拥有非默认构建对象

63150
领券