Предоставление идентификаторов других модулей через новый модуль
Иногда требуется повторно экспортировать и открыть для внешнего доступа идентификаторы из другого модуля внутри текущего нового модуля. Итоговый результат: достаточно подключить этот новый модуль, чтобы напрямую использовать все его идентификаторы.
Сферы применения:
- Обеспечение совместимости со старыми версиями модулей, сохранение старого синтаксиса вызова;
- Инкапсуляция низкоуровневых внутренних модулей, скрытие файлов базовой реализации от внешнего кода.
Способ реализации: в секции 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.

Previous: Идентификаторы с квалификацией модуля
Next: Что такое класс