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;
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.