Ver Mensaje Individual
  #8  
Antiguo 03-08-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Por embarrar un poco más el tema me gustaría añadir (según me parece) la posibilidad de usar las cláusulas "initialization" y "finalization". Quiere decirse, que, la propia unidad que declara la clase, puede a su vez declarar una variable del tipo de la clase, y, además crear y liberar la correspondiente instancia gracias a las mencionadas cláusulas "initialization" y "finalization". De esta forma, el método "SayHello()" de la siguiente clase de ejemplo:

Código Delphi [-]
unit MyCustomObject;

interface

type
  TMyCustomObject = class( TObject )
  public
    procedure SayHello();
  end;

var
  MyGlobalCustomObject : TMyCustomObject;

implementation

uses
  Winapi.Windows;

{ TMyCustomObject }

procedure TMyCustomObject.SayHello();
begin
  MessageBox( 0, 'Hello!', 'Hello!', 0 );
end;

initialization
  MyGlobalCustomObject := TMyCustomObject.Create();

finalization
  MyGlobalCustomObject.Free();

end.

... decíamos que el método "SayHello()" puede ser utilizado desde cualquier lugar con sólo añadir la anterior unidad, sin necesidad de preocuparse por la creación y destrucción de objeto alguno, tal que:

Código Delphi [-]
unit Unit2;

interface

uses
  Vcl.Forms;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses
  MyCustomObject;

procedure TForm2.FormCreate(Sender: TObject);
begin
  MyGlobalCustomObject.SayHello();
end;

end.

No sé si esta otra "solución" valdrá de algo o no: yo sólo quería embarrar un poco más este hilo.
Responder Con Cita