Ver Mensaje Individual
  #4  
Antiguo 09-01-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En Delphi, como dices, hay un recurso similar usando la directiva {$I archivo.inc}, pero, realmente no tendrás dos unidades distintas, simplemente estás incluyendo un archivo en otro, de forma que es como si el contenido del archivo externo lo hubieras escrito en el punto donde está la directiva.

Por otro lado, este problema puede resolverse definiendo clases abstractas en una unidad:

Código Delphi [-]
// patronvisitante.pas

type
  TVisitante = class;

  TElemento = class
    procedure Aceptar(Visitante: TVisitante); virtual; abstract;
  end;

  TVisitante = class
    procedure Visitar(Elemento: TElemento); virtual; abstract;
  end;

En esta unidad no implementas nada, pero ya puedes incluirla en las unidades de las clases descendientes:

Código Delphi [-]
unit UnElemento;

interface

uses patronvisitante;

type
  TUnElemento = class(TElemento)
    procedure Aceptar(Visitante: TVisitante); override;
  end;

implementation

procedure TUnVisitante.Aceptar(Visitante: TVisitante);
begin
  ...
end;

end.

Código Delphi [-]
unit UnVisitante;

interface

uses patronvisitante;

type
  TUnVisitante = class(TVisitante)
    procedure Visitar(Elemento: TElemento); override;
  end;

implementation

procedure Visitar(Elemento: TElemento);
begin
  ...
end;

end.

// Saludos
Responder Con Cita