Totalmente de acuerdo con lo que decis; pero vuelvo a remarcar que a mi no me interesa mucho el ahorro de bytes en el binario final sino el concepto (impacto que tiene en el diseño) el tener un uses que sobra
Cita:
Lazarus es igual, aunque en esto es un poco más vivo: te informa de las unidades que no se están usando.
|
Eso es sencillamente fantastico. En Delphi no tenemos algo asi?
Cita:
Y considerar que los constructores y destructores de clase vienen a ser, para muchas nuevas bibliotecas, una mejor alternativa que las tradicionales secciones Initialization y Finalization. Estas últimas, opcionales al final de las unidades .pas, sí que hacen que el programa ejecutable pese y haga más cosas de las que vemos a simple vista.
|
Si y no. Si la clase nunca se usa entonces el constructor de clase no se ejecuta. Por eso el truco del .ClassName
. Por supuesto que si el usuario usa la biblioteca todo marcha bien
Código Delphi
[-]
unit Unit3;
interface
type
TTestClassConstructor = class
public
class constructor Create;
class destructor Destroy;
end;
implementation
class constructor TTestClassConstructor.Create;
begin
Writeln('TTestClassConstructor.Create');
end;
class destructor TTestClassConstructor.Destroy;
begin
Writeln('TTestClassConstructor.Destroy');
end;
end.
Con un codigo de aplicacion de consola vacio (un simple Readln para que no se cierre), aunque este la unit3 en el uses, los constructor/destructor de clase no se ejecutan.
Pero, si hago esto si:
Código Delphi
[-]
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit3 in 'Unit3.pas';
begin
try
TTestClassConstructor.ClassName;
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Esto se ejecuta
siempre
Código Delphi
[-]
unit Unit3;
interface
implementation
initialization
Writeln('initialization');
finalization
Writeln('finalization');
end.