巧用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 获取指定记录的地址。

 

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

举报

相关文章推荐

Delphi的ORM框架:InstantObjects类图与介绍

====================================================== 注:本文源代码点此下载 =============================...

Delphi的ORM框架:InstantObjects类图与介绍

(开头先从网上抄些ORM的介绍)什么是ORM?ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射。ORM也可理解是一种规...
  • lee576
  • lee576
  • 2008-04-03 15:37
  • 2576

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Delphi2010 RTTI + Attribute 简单实现ORM实例

1、支持ORM,最基础的两个信息是表的信息和字段信息。这两个信息,如果用Attribute 来辅助,代码更简洁和可读性更好。可以把属性名当做真实字段名,也可以将特性里的属性当成真实姓名,再加上字段标题...

InstantObjects参考 - delphi的ORM实现

概述本文档是关于构建基于InstantObjects框架的参考手册。       主要包括以下三个部分:l        建立业务模型l   ...
  • lee576
  • lee576
  • 2008-04-03 14:29
  • 2079

遥感图像分类

方法:监督分类,非监督分类,专家分类器,流行方法:神经网络,遗传算法,Matlab、面向对象分类工具:PCI 、ENVI、 ERDAS、Ecognition复杂

InstantObjects是delphi上的一个不错的ORM框架,可以实现类似hibernate的功能。

ORM框架是数据库和类或者record之间快速转换的一个技术(猜的),很有用的技术. InstantObjects是delphi上的一个不错的ORM框架,可以实现类似hibernate的功能...

delphi RTTI的主要函数和应用示例

delphi 的RTTI为面向对象的编程提供的极大的方便,我们可以不用管对象的类型,只要通过RTTI的方法判断是否有我们需要改变的属性名和属性对象,以下是主要函数 ⊙ GetTypeData 函...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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