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

常量定义(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 获取指定记录的地址。

 

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

时间: 2024-09-11 20:10:19

巧用Delphi 2010 RTTI 管理常量(const)!的相关文章

Delphi 的RTTI机制浅探(一)

目录===============================================================================⊙ RTTI 简介⊙ 类(class) 和 VMT 的关系⊙ 类(class).类的类(class of class).类变量(class variable) 的关系⊙ TObject.ClassType 和 TObject.ClassInfo⊙ is 和 as 运算符的原理⊙ TTypeInfo – RTTI 信息的结构⊙ 获取类(c

用delphi的Rtti实现数据集的简单对象化

用DELPHI的RTTI实现数据集的简单对象化 [Mental Studio]猛禽 在<强大的DELPHI RTTI--兼谈需要了解多种开发语言>一文中,我说了一下我用DELPHI的RTTI实现了数据集的简单对象化.本文将详细介绍一下我的实现方法. 首先从一个简单的例子说起:假设有一个ADODataSet控件,连接罗斯文数据库,SQL为: select * from Employee 现在要把它的内容中EmployeeID, FirstName, LastName,BirthDate四个字段显

MVC巧用枚举做权限管理

用户数据表,每个用户有一个或者多个权限,用户表如下 userid,roleid,username等 权限枚举如下: public class CustomEnum     {         [Flags]         /// <summary>         /// 用户角色枚举         /// </summary>         public enum UserRole         {             /// <summary>     

Delphi 的RTTI机制浅探(二)

目 录===============================================================================⊙ GetTypeData 函数⊙ GetPropInfo 函数⊙ FindPropInfo 函数⊙ GetPropInfos 函数⊙ SortPropList 函数⊙ GetPropList 函数------------------------------------------------------⊙ GetObjectProp

Delphi的内存管理

Delphi自动管理的内存 Delphi中原子变量,如Integer.Boolean.Record.枚举等都是在作用域内编译器自动申请内存,出了作用域自动释放:另外,字符串.Variant.动态数组.接口也是由Delphi自动管理. 这些变量都是在栈中存储的,除了接口.另外,Variant是程序员用函数手工创建的,例如VarArrayCreate:动态数组也是程序员用函数手工创建的,例如SetLength,但这两种情况都不需要程序员自己释放. 另外,还有一种变量需要注意,是使用Threadvar

网络游戏与手机娱乐纳入文化部2010年管理重点

本报讯 文化部http://www.aliyun.com/zixun/aggregation/39469.html">文化市场司日前向各地文化市场行政执法总队印发了<2010年文化市场司工作要点>.函中提到,面对目前纷乱的艺术品市场,继续修改<艺术品市场管理条例>(草案),争取年内报送国务院法制办审议.此外,制定<网络游戏管理办法>及其起草<手机娱乐管理办法>也纳入了今年的工作重点. 文件中2010年文化市场司工作共有九大要点.首先是2010

网络游戏与手机娱乐纳入2010年管理重点

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 文化部文化市场司日前向各地文化市场行政执法总队印发了<2010年文化市场司工作要点>.函中提到,面对目前纷乱的艺术品市场,继续修改<艺术品市场管理条例>(草案),争取年内报送国务院法制办审议.此外,制定<网络游戏管理办法>及其起草<手机娱乐管理办法>也纳入了今年的工作重点. 文件中2010年文化

巧用DOS命令 轻松管理XP防火墙

对于Windows系统自带有防火墙功能,不少人认为该功能并不是十分强大,无法保护好系统安全,于是安装一些杀毒软件,来保护系统安全.其实,我们也是可以用自带防火墙保护好系统的. 在管理Windows系统内置的防火墙时,很多人会在Windows状态下,进入防火墙的参数配置界面来进行管理.事实上,还通过一些简单的DOS命令,来对防火墙进行快速管理控制.有时,我们的电脑可能会遭到攻击,导致网络不能访问,这时可通过DOS命令,快速让防火墙的参数恢复到默认数值; [attach]140474[/attach

巧用Excel Web App管理电子表格

公司准备在下个月组织到清远进行一次野外互动,主题为加强员工的团队集体意识,为了更好的完成这一次野外互动,公司准备为每一个员工都配一件衣服,分别组织几个不同的小队,我所在的小团队有8个人,而我有幸成为该小队的小队长,所以,目前需要我去做的第一个问题就是"统计我的组织团队成员衣服的大小",然后提交给行政去帮忙购买. 所有,第一步,我要先创建好一个电子表格,并简单的为它套用一个表格样式,得到如下图标: 我们知道,衣服的大小一般都是分为M,S,L,XL,XXL等,为了统计的方便,我将定义衣服大