巧用Delphi 2010 RTTI 管理常量(const)!

转载 2011年01月09日 20:29:00

常量定义(const)在D7及D7之前的版本,一般只能在单元里,以全局方式声明和定义。自D7之后的新版本,常量可以放在一个类里声明,比如放在 类的 publicprivate里。

       有那么一种常量,你希望常量的名称和真实的常量值一样,比如,用于作配置文件的常量。当然,如果你不觉得辛苦,一般来说,常量名和常量值逐个敲出来,也无可厚非。但是,如果你还在使用D2010作开发而不发挥新RTTI技术,很显然,你已经Out了,不随波逐流使用新技术,连“走马观花”赏花的机会也没有。

     为了方便管理常量,我们需要声明一个记录类型。为啥使用记录类型而不是类呢?因为记录类型不用创建和释放,其次,记录比类更节省系统资源。

    //参数的名称信息,用于常量设置,都是字符串
TParamName = record
    Socket:string;
    System:string;
    DBConfig:string;
    //通讯参数
    ThreadCount:string;
    Port:string;
    SessionLife:string;
    TimeOut:string;
    ZipRate:string;
    Encrypt:string;
    //系统参数
    AutoRun:string;
    SocketLog:string;
    BusinessLog:string;
    DBLog:string;
    //数据库配置
    Server:string;
    Provider:string;
    DataBase:string;
    DBPort:string;
    UserName:string;
    UserPswd:string;
    Pooling:string;
    PoolMax:string;
    PoolMin:string;
    PoolLife:string;
end;

 

------------我们使用一个新的方法管理 记录类型的 RTTI--------------------------------------

uses RTTI;

function TRttiInfo.SetRecordDeftValue(TypeInfoValue, RecValue: Pointer): Boolean;
var
RTX:TRttiContext;
RT:TRttiType;
RF:TRttiField;
iCount:Integer;
begin
Result := False;
try
    RTX := TRttiContext.Create;
    RT := RTX.GetType(TypeInfoValue);
    iCount := 0;
    for RF in RT.AsRecord.GetFields do
    begin
        RF.SetValue(RecValue,RF.Name);
        Inc(iCount);
    end;
    Result := iCount >0;
finally
    RTX.Free;
end;

end;

--------------调用就非常简单,需要指针来辅助参数传输了---------------

var

   SysParamName:TParamName ;//记录声明

 

调用:

    RttiInfo.SetRecordDeftValue(TypeInfo(TParamName),@SysParamName);

    1、 由于记录类型是一个抽象的类型,没有具体的类型名,因此需要借助 TypeInfo来获取类型信息

   2、通过 @SysParamName 获取指定记录的地址。

 

很简单吧,希望能对你有点帮助!

C++中的RTTI机制解析

RTTI概念 RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。 RTTI机制的...
  • three_bird
  • three_bird
  • 2016年05月23日 09:31
  • 5626

const常量与宏定义区别

1,转载地址: http://blog.sina.com.cn/s/blog_60d6fadc01012i52.html (1) 编译器处理方式不同   define宏是在预处理阶段展开...
  • zzuchengming
  • zzuchengming
  • 2016年06月28日 11:16
  • 1288

如何优雅的创建nodejs共享常量

如何优雅的创建nodejs的共享常量呢
  • wp270280522
  • wp270280522
  • 2015年11月04日 11:44
  • 4049

关闭RTTI,减小Delphi2010程序的尺寸

自从Delphi2010增强了RTTI反射机制后,编译出来的程序变得更大了,这是因为默认情况下 Delphi2010 给所有类都加上了RTTI信息(呵呵,不管你用不用它,好像实用价值确实不高,至少目前...
  • nhconch
  • nhconch
  • 2013年04月16日 14:17
  • 1815

减小Delphi2010程序的尺寸(关闭RTTI反射机制)

====================================================== 注:本文源代码点此下载 =============================...
  • javazhuanzai
  • javazhuanzai
  • 2012年01月15日 04:01
  • 146

每日程炼-delphi2010 Rtti获取某一个类的信息

delphi2010新增的Rtti单元可以轻松的获取某一个指定的类的信息。Demo下载Rtti 单元(1)程序代码:程序代码: unit Unit1; interface uses Windo...
  • GODYAD
  • GODYAD
  • 2011年05月16日 01:43
  • 2061

关闭RTTI反射机制,减小Delphi2010程序的尺寸

关闭RTTI反射机制,减小Delphi2010程序的尺寸
  • shuaihj
  • shuaihj
  • 2011年01月09日 20:45
  • 3585

Delphi 2010 新增功能之: Rtti 单元(5): 获取方法的更多信息

====================================================== 注:本文源代码点此下载 =============================...
  • javazhuanzai
  • javazhuanzai
  • 2012年02月01日 07:02
  • 302

Delphi 利用RTTI实现的插件管理模块,插件可自动注册。

  • 2017年06月05日 17:29
  • 6KB
  • 下载

指针常量与常指针CONST

  • 2010年06月14日 12:43
  • 296B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:巧用Delphi 2010 RTTI 管理常量(const)!
举报原因:
原因补充:

(最多只允许输入30个字)