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

        常量定义( const )在D7及D7之前的版本,一般只能在单元里,以全局方式声明和定义。自D7之后的新版本,常量可以放在一个类里声明,比如放在 类的 public private 里。
        有那么一种常量,你希望常量的 名称 和真实的 常量值 一样,比如,用于作配置文件的常量。当然,如果你不觉得辛苦,一般来说,常量名和常量值逐个敲出来,也无可厚非。但是,如果你还在使用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 2010新 RTTI 管理常量(const)! - yyimen - yyimen的博客
            
            转发至微博
          
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值