Expor unidades antigas

Expor identificadores de outras unidades através de uma nova unidade

Às vezes você precisa reexportar e disponibilizar os identificadores de outra unidade dentro da sua nova unidade atual. O resultado final: basta referenciar essa nova unidade para usar diretamente esses identificadores.

Cenários de aplicação:

  1. Garantir compatibilidade com versões antigas de unidades e manter a sintaxe de chamada legada;
  2. Encapsular unidades internas de baixo nível e ocultar os arquivos de implementação subjacentes de acessos externos.

Forma de implementação: na seção interface da unidade atual, redefina identificadores com mesmo nome ou apelidos para encaminhar tipos e constantes da unidade base.

Editar MyUnit.pas

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

interface
uses Graphics;

type
  // Forma 1: Criar apelido, expor Graphics.TColor externamente como TMyColor
  TMyColor = TColor;

  // Forma 2: Expor com o nome original; é obrigatório usar o qualificador Graphics. para evitar referências circulares
  TColor = Graphics.TColor;

const
  // Constantes também suportam encaminhamento para exposição
  clYellow = Graphics.clYellow;
  clBlue = Graphics.clBlue;

implementation

end.Code language: JavaScript (javascript)

Exemplo completo

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

interface
uses Graphics;

type
  // 1 Apelido de tipo Graphics.TColor: TMyColor
  TMyColor = TColor;

  // 2 Expor nome original
  // use Graphics. para evitar ciclos de referência
  TColor = Graphics.TColor;

const
  // Constantes também funcionam
  clYellow = Graphics.clYellow;

implementation

end.Code language: JavaScript (javascript)

Programa principal

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)

No programa principal, utilizamos os nomes redefinidos dentro de MyUnit.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *