Ver Mensaje Individual
  #23  
Antiguo 11-07-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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.
Responder Con Cita