旧ユニットを公開

新しいユニットから他ユニットの識別子を外部公開する

別のユニットに定義された識別子を、現在の新ユニット内で再エクスポートして公開したい場面があります。動作仕様:この新ユニットをusesするだけで、対象の識別子を直接利用可能になります。

適用場面:

  1. 旧バージョンのユニットと互換性を保ち、古い呼び出し記法を維持する;
  2. 内部の下位ユニットをカプセル化し、下位実装ファイルを外部から隠蔽する。

実装方法:現在のユニットの interface セクションにて同名・エイリアス識別子を再定義し、下位ユニットの型・定数を転送します。

MyUnit.pas を編集

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

interface
uses Graphics;

type
  // 方法1:エイリアス作成、Graphics.TColorTMyColor として外部公開
  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 内で再定義された名称を使用します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です