Das Problem ist/war, wenn man diese Klasse über den Initialization-Abschnitt initialisiert, dann wird sie immer "verwendet" (in Initialization), selbst wenn sie sonst nirgendwo verwendet wird.
Darum ist die
VCL auch so groß, bzw. einige gehn auf
NonVCL und verwenden bestimmte Units garnicht, damit die EXE klein wird.
Aber: Es gibt seit einer Weile den
class constructor
, bzw.
class destructor
... wenn alle dort das machen würde, was sie sonst in "Initialization" machen würden, dann würde vieles wirklich nicht mehr eingebunden, wenn es nicht gebraucht wird.
Was da leider noch fehlt, ist, daß man bei Ressourcen nicht differenzieren kann und es wird immer alles in die EXE gelinkt, was irgendwo im Quellcode gefunden wird, selbst wenn z.B. die Klasse garnicht verwendet/eingelinkt wurde, für welche diese Resource (RES) gedacht war.
@jaenicke: Das Alte/Normale muß natürlich erhalten bleiben, aber wenn ich nur programmintern mehrere Interfaces brauche, dann muß ich auch immer alle Header/Implementationen doppelt schreiben.
In soeinem Fall wäre es eben schön, wenn man sich aus allen public/published-Eigenschaften ein Interface generieren lassen könnte
Delphi-Quellcode:
type
TMyClass = class interfaced(TInterfaceObject) // dafür markieren, daß automatisch ein Interface generiert werden kann, bzw. es wird sofort generiert und später nur zugewiesen, beim OF
...
end;
IMyInterface = interface of TMyClass;
IMyInterface2 = interface of TMyClass2;; // per Forward?
TMyClass2 = class(TInterfaceObject)
...
end;
IMyInterface3 = interface of TMyClass3;; // per Forward und manuell
TMyClass3 = class(TInterfaceObject, IMyInterface3)
...
end;