[Delphi][Record]构造自己的万用数据类型

在Delphi中,Record类型支持操作符重载,即class operator overloading.

其中":="操作符(即赋值)对应的是"implicit"。如果我们针对其编写重载操作符的代码,则可以实现类似Variant类型的万用数据类型。

举例说明

TStringData=Record
private
  fData:String;
public
  class operator implicit(src:string):TStringData;
  class operator implicit(src:TStringData):String;
end;

//SD(TStringData类型):=S(String类型)
class operator TStringData.implicit(src:string):TStringData;
begin
  result.fData:=src;
end;

//S(String类型):=SD(TStringData类型)
class operator TStringData.implicit(src:TStringData):string;
begin
  result:=src.fData;
end;

这样,我们通过不断的重载implicit (:=)操作符,则可以实现,TStringData与不同类型数据之间的直接赋值操作。

例如:

//SD(TStringData类型):=I(integer类型)
class operator implicit(src: integer): TStringData;
//SD(TStringData类型):=I64(int64类型)
class operator implicit(src: int64): TStringData;
//SD(TStringData类型):=DT(TDateTime类型)
class operator implicit(src: TDateTime): TStringData;
//SD(TStringData类型):=D(Double类型)
class operator implicit(src: Double): TStringData;
//SD(TStringData类型):=B(Boolean类型)
class operator implicit(src: Boolean): TStringData;
//SD(TStringData类型):=G(TGuid类型)
class operator implicit(src: TGuid): TStringData;
//SD(TStringData类型):=E(Extended类型)
//x:=1.2 ,这时的1.2一般是Extended类型
class operator implicit(src: Extended): TStringData;
//SD(TStringData类型):=AB(TArray<Byte>类型)
class operator implicit(src: TArray<Byte>): TStringData;

//I(Integer类型):=SD(TStringData类型)
class operator implicit(src: TStringData): integer;
//I64(Int64类型):=SD(TStringData类型)
class operator implicit(src: TStringData): int64;
//DT(TDateTime类型):=SD(TStringData类型)
class operator implicit(src: TStringData): TDateTime;
//D(Double类型):=SD(TStringData类型)
class operator implicit(src: TStringData): Double;
//B(Boolean类型):=SD(TStringData类型)
class operator implicit(src: TStringData): Boolean;
//G(TGuid类型):=SD(TStringData类型)
class operator implicit(src: TStringData): TGuid;
//E(Extended类型):=SD(TStringData类型)
class operator implicit(src: TStringData): Extended;
//AB(TArray<Byte>类型):=SD(TStringData类型)
class operator implicit(src: TStringData): TArray<Byte>;

另外可以实现同类型之间的赋值。

    class operator implicit(src: TStringData): TStringData;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值