Class and Record Helpers

文章出處 : http://blog.leoshiang.com/?p=74

註 : Delphi XE3 開始支持......

Class and Record Helpers 是 Delphi 新增的語言特性,它是一種型別與其他類別(Class)或記錄(Record)結合,讓原來的類別可以使用新增的方法(Method)。聽起來有點難懂,我們用一個比較實際的例子來解釋。

Delphi 有一個內建的 Record TGUID,其定義如下:

TGUID = packed record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
    class operator Equal(const Left, Right: TGUID): Boolean;
    class operator NotEqual(const Left, Right: TGUID): Boolean;
    class function Empty: TGUID; static;
  end;

如果我想新增一個功能可以將 GUID 從串流中讀取,照以前的作法我會這樣設計:
procedeure GUIDFromBytes( const Data: TBytes; const Index: Integer; var GUID: TGUID);
begin
  Move(Bytes[Index], GUID, SizeOf(GUID));
end;

使用方式如下:
var
  GUID: TGUID;
  Data: TBytes;
begin
  GUIDFromBytes(Data, 0, GUID);
end;

這樣的作法,是另外定義一個 procedure 來處理。如果使用 Record Helper 的話可以更簡化:
type
  TUUID = record helper for TGUID
    procedure FromBytes(Bytes: TBytes; I: Integer);
  end;
?
implementation
?
procedure TUUID.FromBytes(Bytes: TBytes; I: Integer);
begin
  Move(Bytes[Index], GUID, SizeOf(GUID));
end;

新建一個類別 TUUID,用 record helper for TGUID 將它與 TGUID 的結合。使用方式如下:
var
  GUID: TGUID;
  Data: TBytes;
begin
  GUID.FromBytes(Data, 0);
end;

有沒有發現差異在哪?使用 Record Helper 之後,新定義的 FromBytes Method 與原本的 TGUID 結合在一起,也就是說我們不修改原本的程式碼便能為原本的 TGUID 增加新的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值