(delphi11最新学习资料) Object Pascal 学习笔记---第12章第4节 (原生类型的记录助手)

12.4.4 原生类型的记录助手

​ 记录助手概念的进一步扩展是能够向本地(或编译器支持的原生)数据类型添加方法。虽然使用相同的“记录助手”语法,但不是应用于记录而是普通数据类型。

注意:记录助手当前可以用于增强和添加操作到原生数据类型,但这在将来可能会改变。今天的运行时库定义了一些数据类型助手在将来可能会消失,保留了使用这些助手的代码的编写方式… 但破坏了定义它们的代码的兼容性。因此,即使这个功能确实非常好用和方便,你也不应该过度使用。

​ 原生数据类型助手在实践中是如何使用的呢?让我们考虑以下对 Integer 类型的助手的定义:

type
  TIntHelper = record helper for Integer
    function AsString: string;
  end;

​ 现在,给定一个整数变量 N,你可以写:

N.AsString;

​ 如何定义伪方法,它又如何引用变量的值呢?通过扩展 Self 标识符的含义,以引用应用于该函数的值:

function TIntHelper.AsString: string;
begin
  Result := IntToStr(Self);
end;

​ 请注意,你也可以将方法应用于常量,例如:

Caption := 400000.AsString;

​ 但是,对于一个较小的值,你不能做同样操作,因为编译器将常量解释为最小可能的类型。所以如果你想获取值为 4 的字符串值,与字节匹配,你必须使用第二种形式:

Caption := 4.AsString; // 错误!
Caption := Integer(4).AsString; // 正确

​ 或者你可以通过定义一个不同的助手来使第一种语句编译:

type
  TByteHelper = record helper for Byte...

​ 正如我们在第二章中已经看到的,对于 IntegerByte 之类的类型,你实际上不需要编写上述代码,因为运行时库为大多数核心数据类型定义了一个相当全面的类助手,在 System.SysUtils 单元中定义的以下内容:

TGUIDHelper = record helper for TGUID
TStringHelper = record helper for string
TSingleHelper = record helper for Single
TDoubleHelper = record helper for Double
TExtendedHelper = record helper for Extended
TByteHelper = record helper for Byte
TShortIntHelper = record helper for ShortInt
TWordHelper = record helper for Word
TSmallIntHelper = record helper for SmallInt
TCardinalHelper = record helper for Cardinal
TIntegerHelper = record helper for Integer
TUInt64Helper = record helper for UInt64
TInt64Helper = record helper for Int64
TNativeUIntHelper = record helper for NativeUInt
TNativeIntHelper = record helper for NativeInt
TBooleanHelper = record helper for Boolean
TByteBoolHelper = record helper for ByteBool
TWordBoolHelper = record helper for WordBool
TWordBoolHelper = record helper for WordBool
TLongBoolHelper = record helper for LongBool
TCurrencyHelper = record helper for Currency // 在 Delphi 11 中添加

​ 还有一些当前在其他单元中定义的原生数据类型助手,例如:

delphiCopy code// System.Character:
TCharHelper = record helper for Char
// System.Classes:
TUInt32Helper = record helper for UInt32
// System.DateUtils
TDateTimeHelper = record helper for TDateTime // 在 Delphi 11 中添加

​ 鉴于我在书的前半部分的许多示例中已经涵盖了这些助手的使用,这里无需重复它们。本节补充的是如何定义原生数据类型助手的描述。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值