Kann man das einfacher erklären?
Nun, der Initialization-Teil einer
Unit wird ja nur dann ausgeführt, wenn die
Unit auch im Projekt mit eingelinkt ist. Taucht die
Unit nirgendwo in einer Uses-Anweisung auf, dann wird sie auch nicht eingelinkt und somit der Initialization-Teil auch nicht ausgeführt. Will man dies trotzdem, dann muss man die
Unit irgendwo in einer uses-Anweisung aufführen, auch wenn das syntaktisch zum compilieren nicht nötig wäre.
Beispiel:
Delphi-Quellcode:
unit A;
interface
type
TMyAbstractClass =
class
public
procedure DoSomething;
virtual;
abstract;
end;
var
MyInstance: TMyAbstractClass =
nil;
implementation
end.
Delphi-Quellcode:
unit B;
interface
implementation
uses
A;
type
TMyClass =
class(TMyAbstractClass)
public
procedure DoSomething;
override;
end;
procedure TMyClass.DoSomething;
begin
// mach irgendwas
end;
initialization
MyInstance := TMyClass.Create;
finalization
MyInstance.Free;
MyInstance :=
nil;
end;
Unit B hat einen leeren interface-Teil, kann also nirgendwo zum compilieren gebraucht werden. Trotzdem funktioniert das Programm nicht, wenn
Unit B nicht trotzdem irgendwo in der uses-Anweisung steht.