Delphi Helper Record Class
4978 ワード
unit Unit1;
{$DEFINE USESGUIDHELP}
interface
implementation
{$IFDEF USESGUIDHELP}
uses System.SysUtils;
{$ENDIF}
procedure test;
var
a:TGUID;//System
begin
{$IFDEF USEGUIDHELP}
a.NewGuid // System.SysUtils.TGuidHelper
a.Create() // System.SysUtils.TGuidHelper
{$ENDIF}
end;
end.
PGUID = ^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;
type
TGuidHelper = record helper for TGUID
class function Create(const B: TBytes): TGUID; overload; static;
class function Create(const S: string): TGUID; overload; static;
class function Create(A: Integer; B: SmallInt; C: SmallInt; const D: TBytes): TGUID; overload; static;
class function Create(A: Integer; B: SmallInt; C: SmallInt; D, E, F, G, H, I, J, K: Byte): TGUID; overload; static;
class function Create(A: Cardinal; B: Word; C: Word; D, E, F, G, H, I, J, K: Byte): TGUID; overload; static;
class function NewGuid: TGUID; static;
function ToByteArray: TBytes;
function ToString: string;
end;
1、Recordは継承をサポートせず、Helperを使用して間接的に継承を完了した
2、Recordをそれぞれのユニット(ネーミングスペース)に、Helperを選択可能に使用し、元の呼び出しに影響を及ぼさずに拡張コードでHelperを使用する方法、元のRecordやclass定義を変更せずに直接上書きする方法があります.