了解运行时类型信息(RTTI)

RTTI需要引用单元TypeInfo

GetPropInfo 函数用于获得属性的 RTTI 指针 PPropInfo。它有四种重载形式,后面三种重载的实现都是调用第一种形式。AKinds 参数用于限制属性的类型,如果得到的 PPropInfo 不属于指定的类型,则返回 nil。

function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string): PPropInfo;

function GetPropInfo(Instance: TObject; const PropName: string;AKinds: TTypeKinds = []): PPropInfo;

function GetPropInfo(AClass: TClass; const PropName: string;AKinds: TTypeKinds = []): PPropInfo;

function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string;AKinds: TTypeKinds): PPropInfo;

//以下代码,循环修改窗体上的Button组件的Capiton
//方法一:
procedure TForm1.SetCaption;
var
  pInfo : PPropInfo;
  i:integer;
begin
  for i := 0 to Self.ControlCount - 1 do
  begin
    pInfo := GetPropInfo(Self.Controls[i],‘Caption‘);   //GetPropInfo,根据‘Caption‘字符串,查找Caption属性
    if pInfo <> nil then                             //如果有
      TButton(Self.Controls[i]).Caption:= ‘ABC‘;     //修改Capiton
  end;
end;
方法二:
procedure TForm1.SetCaption;
var
  pInfo : PPropInfo;
  i:integer;
begin
  for i := 0 to Self.ControlCount - 1 do
  begin
    pInfo := GetPropInfo(Self.Controls[i],‘Caption‘);
    if pInfo <> nil then
      SetPropValue(Self.Controls[i],‘Caption‘,‘ABC‘);
  end;
end;

参考:http://www.cnblogs.com/key-ok/p/3358804.html

时间: 2024-10-13 00:25:33

了解运行时类型信息(RTTI)的相关文章

运行时类型信息RTTI

我们在写C++代码的时候经常碰到使用dynamic_cast进行类型转换的情况,也都知道经过dynamic_cast的转换更加安全,因为dynamic_cast进行了类型检查. 但是可能很多人不知道dynamic_cast是C++ 运行时类型信息(RTTI)机制链条上的一个节点. RTTI提供了两个操作符和一个类: dynamic_cast typeid type_info 整个RTTI, 作为一个整体,暴露给程序员的就是这三个元素.因此我们关注的焦点也就在它们身上了. 什么是RTTI 在C++

C++运行时类型识别——RTTI

RTTI 通过运行时类型识别--RTTI,程序能够使用基类的指针或引用来检索这些指针或引用所指对象的实际派生类类型: 其主要通过两个操作符来实现: 1.typeid--返回指针或引用所指对象的实际类型: 2.dynamic_cast--将基类类型的指针或引用安全地转换为派生类型的指针或引用: dynamic_cast 当无法为基类增加虚函数,又要使用基类的指针或引用调用派生类的函数时,可以使用该操作符代替虚函数. 与dynamic_cast一起使用的指针必须是有效的--它必须为0或者指向一个对象

MFC中的运行时类型识别(RTTI)

RTTI是Runtime Type Identification的缩写,中文名为"运行时类型识别". MFC早在编译器支持RTTI之前,就有了这种能力.我们现在要以相同的手法,在Console程序中仿真出来.我希望我的类库具备IsKindOf 的能力,能在执行期侦测到某个对象是否属于某个类,并传回TRUE 或 FALSE.以形状 Shape为例 ,我希望: 即 长方形属于"长方形类",正方形属于"长方形类",圆不属于"长方形类"

C++学习之显示类型转换与运行时类型识别RTTI

static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情况一样? 什么情况下使用dynamic_cast代替虚函数? typeid 命名的强制类型转换形式如下: cast_name<type>(expression); 其中:cast_name指static_cast.dynamic_cast.const_cast.reinterpret_cast中的

Java的反射与RTTI(运行时类型信息)的区别

重要的事情说三遍: 反射并没有什么神奇之处!反射并没有什么神奇之处!反射并没有什么神奇之处! 当通过反射与一个未知类型的对象打交道时,JVM只是简单地检查这个对象,看它属于哪个特定的类(和RTTI一样).在用它做其他事情之前必须先加载那个类的class对象. 那个类的class文件要么存在于本地,要么在网络上. 仅此而已. 反射和RTTI的区别就是何时获得和打开class文件. RTTI在编译时打开和检查class文件.(换句话说,我们以普通的方式调用对象的方法) 反射在运行时打开和检查clas

运行时类型识别RTTI

1.RTTI的工作原理 例1. 用Class加载对象示例. package RTTI; public class Candy { static{ System.out.println("Loading Candy in static block."); } public static void main(String[] args) { System.out.println("Loading Candy in main method."); } } package

Java基础之RTTI 运行时类型识别

运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于RTTI实现的.RTTI的功能主要是由Class类实现的. Class类 Class类是"类的类"(class of classes).如果说类是对象的抽象和集合的话,那么Class类就是对类的抽象和集合. 每一个Class类的对象代表一个其他的类.比如下面的程序中,Class类的对象c1代

RTTI (Run-Time Type Identification,通过运行时类型识别) 转

参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型: (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用. 面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持. 本文将简略介绍 RTTI 的一些背景知识.描述 R

Java 笔记(四) RTTI - 运行时类型检查

运行时类型检查,即Run-time Type Identification.这是Java语言里一个很强大的机制,那么它到底给我们的程序带来了什么样的好处呢? 在了解运行时类型检查之前,我们要首先知道另一个密切相关的概念,即运行时类型信息(Run-time Information - 也可以缩写为RTTI) 运行时类型信息使得你可以在程序运行时发现和使用类型信息. 来自:<Thinking in Java>. OK,那么我们总结来说,RTTI就是能够让我们在程序的运行时去获取类型的信息.接下来我