Zitat von
Bernhard Geyer:
Zitat von
jottkaerr:
Die Reihenfolge der Abarbeitung der initialization-Abschnitte wird mit Sicherheit nicht mehr geändert werden. Sie ist nämlich dokumentiert,
Quelle?
In der Delphi-5-Hilfe, besonders der zweite Absatz:
Zitat von
Delphi-Hilfe:
Der initialization-Abschnitt
Der initialization-Abschnitt ist optional. Er beginnt mit dem reservierten Wort initialization und endet mit dem Beginn des finalization-Abschnitts oder - wenn kein finalization-Abschnitt vorhanden ist - mit dem Ende der
Unit. Der initialization-Abschnitt enthält Anweisungen, die beim Programmstart in der angegebenen Reihenfolge ausgeführt werden. Arbeiten Sie beispielsweise mit definierten Datenstrukturen, können Sie diese im initialization-Abschnitt initialisieren.
Die initialization-Abschnitte von Units, die von Clients eingebunden werden, werden in der Reihenfolge ausgeführt, in der die Units in der uses-Klausel des Clients angegeben sind.
Mit Clients sind Units und
DPR-Dateien gemeint, die andere Units einbinden.
Zitat von
Bernhard Geyer:
Zitat von
jottkaerr:
und es gibt viel zu viele Quelltexte, die sich darauf verlassen. Den auf eine solche Änderung folgenden Aufschrei, auch der eigenen Entwickler, will Embarcadero bzw. Codegear nicht hören.
Ich wüsste nicht wo in unserem Programm die Init-Reihenfolge der Units relevant wäre?
Wenn eine
Unit ein globales Objekt bereitstellt, z.B. ein Singleton, muss sichergestellt sein, dass dieses Objekt auch in initialization-Abschnitten von Units, die eben diese
Unit einbinden, schon existiert. Das lässt sich nur über eine definierte Abarbeitungsreihenfolge der initialization-Abschnitte erreichen. (Oder durch eine on-the-fly-Erstellung des Singletons. Durch die o.g. Regel kann man sich aber das dazu notwendige Überprüfen, ob das Objekt bereits erzeugt wurde, sparen, wenn das Objekt sowieso in den meisten oder fast allen Fällen benötigt wird.)
Zitat von
Bernhard Geyer:
Und da du ja nur auf globale Variablen von Units zugreifen kannst die du auch used ist auf jeden Fall in dieser
Unit die initalisierung schon durchgeführt bevor irgendeine Quellcodezeile deiner
Unit aufgerufen wird. Es gilt die Regel die taaktaak beschrieben hat.
Habe ich dem irgendwo widersprochen? Ich bezog mich nur auf die Aussage von Christian.
jkr