Class and Record Helpers

来源:互联网 发布:淘宝网棉麻绣花女装 编辑:程序博客网 时间:2024/06/05 21:59
文章出處 : 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 增加新的功能。

0 0
原创粉丝点击