暴露旧单元

在新单元对外暴露其他单元的标识符

有时你需要把另一个单元里的标识符,在当前新单元中重新导出暴露。最终效果:只要引用这个新单元,就能直接使用该标识符。

适用场景:

  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 type alias TMyColor
  TMyColor = TColor;

  // 2 Expose original name
  // qualify with Graphics. to prevent self-loop.
  TColor = Graphics.TColor;

const
  // Constants support  too.
  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中重新命名的名称的。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注