Exponer unidades antiguas

Exponer identificadores de otras unidades a través de una unidad nueva

A veces necesitas reexportar y exponer los identificadores de otra unidad dentro de tu nueva unidad actual. El resultado final: solo tienes que referenciar esta unidad nueva para poder usar directamente esos identificadores.

Escenarios de uso:

  1. Mantener compatibilidad con versiones antiguas de unidades y conservar la sintaxis de llamada anterior;
  2. Encapsular unidades internas de bajo nivel y ocultar los archivos de implementación subyacentes al exterior.

Modo de implementación: en la sección interface de la unidad actual, redefine identificadores homónimos o alias para reenviar los tipos y constantes de la unidad base.

Modificar MyUnit.pas

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

interface
uses Graphics;

type
  // Método 1: Crear alias, exponer Graphics.TColor externamente como TMyColor
  TMyColor = TColor;

  // Método 2: Exponer con el nombre original; es obligatorio añadir el calificador Graphics. para evitar referencias circulares
  TColor = Graphics.TColor;

const
  // Las constantes también admiten el reenvío para su exposición
  clYellow = Graphics.clYellow;
  clBlue = Graphics.clBlue;

implementation

end.Lenguaje del código: JavaScript (javascript)

Ejemplo completo

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

interface
uses Graphics;

type
  // 1 Alias de tipo Graphics.TColor llamado TMyColor
  TMyColor = TColor;

  // 2 Exponer el nombre original
  // Usar Graphics. para evitar bucles de referencia propios
  TColor = Graphics.TColor;

const
  // Las constantes también funcionan
  clYellow = Graphics.clYellow;

implementation

end.Lenguaje del código: PHP (php)

Programa principal

program showcolor;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}

uses MyUnit;
var
  C1: TMyColor;
  C2: TColor;

begin
  C1 := clYellow;
  C2 := clYellow;
end.
Lenguaje del código: PHP (php)

En el programa principal, usamos los nombres redefinidos dentro de MyUnit.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *