zoukankan      html  css  js  c++  java
  • Delphi Helper Record Class

    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定义而直接覆盖它们中的方法。

  • 相关阅读:
    zabbix agent安装(三)
    获取hudson持续构建编译结果的一种方法
    一些C/C++中的函数
    设置页眉的章节及标题方法
    编译64位geos库的经验总结
    无法定位程序输入点到_ftol2于动态链接库msvcrt.dll的错误的解决
    Java学习笔记(二)
    初学网络协议
    HTTPS与SSL(二)
    HTTPS与SSL(一)
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/4386715.html
Copyright © 2011-2022 走看看