新しいユニットから他ユニットの識別子を外部公開する
別のユニットに定義された識別子を、現在の新ユニット内で再エクスポートして公開したい場面があります。動作仕様:この新ユニットをusesするだけで、対象の識別子を直接利用可能になります。
適用場面:
- 旧バージョンのユニットと互換性を保ち、古い呼び出し記法を維持する;
- 内部の下位ユニットをカプセル化し、下位実装ファイルを外部から隠蔽する。
実装方法:現在のユニットの 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 内で再定義された名称を使用します。
