暴露舊單元

透過新單元向外暴露其他單元的識別符

有時你需要將另一個單元內的識別符,在目前的新單元中重新匯出並對外開放。最終效果:只要參照此新單元,就能直接使用該識別符。

適用場景:

  1. 為舊版單元提供相容性,保留舊有的呼叫寫法;
  2. 封裝底層內部單元,對外部隱藏底層實作檔案。

實作方式:在目前單元的 interface 區段重新定義同名/別名識別符,轉發底層單元的型別、常數。

修改 MyUnit.pas

unit MyUnit;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}

interface
uses Graphics;

type
  // 方式1:建立別名,將 Graphics.TColor 對外命名為 TMyColor
  TMyColor = TColor;

  // 方式2:使用原始名稱對外暴露,必須加上單元限定 Graphics. 避免自我參照迴圈
  TColor = Graphics.TColor;

const
  // 常數同樣支援轉發暴露
  clYellow = Graphics.clYellow;
  clBlue = Graphics.clBlue;

implementation

end.Code language: PHP (php)

完整範例

unit MyUnit;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}

interface
uses Graphics;

type
  // 1 Graphics.TColor 型別別名 TMyColor
  TMyColor = TColor;

  // 2 暴露原始名稱
  // 加上 Graphics. 限定避免自我迴圈參照
  TColor = Graphics.TColor;

const
  // 常數也支援此機制
  clYellow = Graphics.clYellow;

implementation

end.Code language: PHP (php)

主程式

program showcolor;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}

uses MyUnit;
var
  C1: TMyColor;
  C2: TColor;

begin
  C1 := clYellow;
  C2 := clYellow;
end.
Code language: PHP (php)

在主程式中,我們使用 MyUnit 內重新定義的名稱。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *