Rtti 单元(5): 获取方法的更多信息

简介: 方法的更多信息是指: 方法类型、返回值、参数等.unit Unit1;  interface  uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo...

方法的更多信息是指: 方法类型、返回值、参数等.

unit Unit1; 
 
interface 
 
uses 
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
 Dialogs, StdCtrls; 
 
type 
 TForm1 = class(TForm) 
  Memo1: TMemo; 
  Button1: TButton; 
  procedure Button1Click(Sender: TObject); 
 end; 
 
var 
 Form1: TForm1; 
 
implementation 
 
{$R *.dfm}  
 
uses Rtti,TypInfo; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 ms: TArray<TRttiMethod>; 
 m: TRttiMethod; 
 mps: TArray<TRttiParameter>; 
 mp: TRttiParameter; 
begin 
 Memo1.Clear; 
 
 {先获取方法集合, 这里随便使用了 TButton 类} 
 ms := TRttiContext.Create.GetType(TButton).GetMethods; 
 for m in ms do 
 begin 
  {方法名称} 
  Memo1.Lines.Add('方法名称: ' + m.Name); 
 
  {方法类型: proceedure、function 等} 
  Memo1.Lines.Add('方法类型: ' + GetEnumName(TypeInfo(TMethodKind), Ord(m.MethodKind))); 
 
  {方法的返回值类型} 
  if Assigned(m.ReturnType) then 
   Memo1.Lines.Add('返回值: ' + GetEnumName(TypeInfo(TTypeKind), Ord(m.ReturnType.TypeKind))); 
 
  {方法的参数列表} 
  mps := m.GetParameters; 
  if Length(mps) > 0 then 
  begin 
   Memo1.Lines.Add('参数:'); 
   for mp in mps do Memo1.Lines.Add(mp.ToString); 
   //还可以通过 mp.ParamType 获取参数的数据类型 
   //还可以通过 mp.Flags 获取参数的修饰符(譬如 var、const 等) 
  end; 
 
  Memo1.Lines.Add(EmptyStr); 
 end; 
end; 
 
end.

相关文章
|
存储 C语言 C++
c++类型转换与RTTI运行阶段类型识别
我们都知道C++完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向const对象的指针转换成非const对象的指针,可能将基类对象指针转成了派生类对象的指针,这种转换很容易出bug,需要严格审查代码才能消除这种隐患,但是C这种转换方式不利于我们审查代码,且程序运行时也可能会出bug。
103 2
|
安全
RxSwift特征序列Driver的使用,以及共享附加作用与非共享附加作用的区别?
RxSwift特征序列Driver的使用,以及共享附加作用与非共享附加作用的区别?
166 0
西门子S7-1200PLC变量表如何使用?如何声明、选用、显示、定义、更改变量?变量保持性如何设置?
在S7-1200 CPU的编程理念中,特别强调符号寻址的使用,在开始编写程序之前,用户应当为输入、输出、中间变量定义相应的符号名,也就是标签。具体步骤如下:
西门子S7-1200PLC变量表如何使用?如何声明、选用、显示、定义、更改变量?变量保持性如何设置?
C++RTTI(运行时类型识别)与异常处理解析
C++RTTI(运行时类型识别)与异常处理解析
126 0
|
Java
使用java反射机制读取任意类内部细节
使用java反射机制读取任意类内部细节
130 0
|
Java 程序员
系统定义的异常类及其层次
Java程序中,由于程序员的疏忽和环境因素的变化,会经常出现异常情况,为了保证程序的正常运行,Java语言专门提供了异常处理机制; Java针对各种常见的异常定义了相应的异常类,并建立了异常类体系。
122 0
系统定义的异常类及其层次
|
安全 C++
逆向分析一个完整的C++程序包含寄存器与参数传递详解
最近在分析C++ dump 文件的时候觉得有必要将一些必要的反汇编东西总结一下以备别人参考,自己有时间的时候也可以进行更多的改进。下面通过一个简单的C++代码转成汇编代码后的详细解释说明一下C++和汇编的对应关系,以及如何识别汇编代码中进行的一些操作的意义。
875 0