Предоставление старых модулей

Предоставление идентификаторов других модулей через новый модуль

Иногда требуется повторно экспортировать и открыть для внешнего доступа идентификаторы из другого модуля внутри текущего нового модуля. Итоговый результат: достаточно подключить этот новый модуль, чтобы напрямую использовать все его идентификаторы.

Сферы применения:

  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: JavaScript (javascript)

Полный пример

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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *