Dans la mesure où je comprends ce que vous avez devrait être parfaitement valide. Un peu gênant mais valide. Mais une meilleure façon pourrait être de déclarer une variable dans l'unité B et de l'initialiser/finaliser par B. Puisque les initialisations se produisent avant que tout autre code ne soit appelé, elles seront initialisées avant d'être mises à la disposition de l'unité A tant qu'elles sont déclarées dans la clause uses de l'unité A.
Une autre étape que vous pourriez envisager est de prendre la variable unité de B un peu plus loin et l'avoir comme une fonction d'appel pour le chargement à la demande, mais cela pourrait aussi dépendre de votre utilisation.
par exemple
unit unitB;
interface
type
TFoo = class
// code...
end;
// code....
function UnitVarB:TFoo;
implementation
var
gUnitVarB : TFoo;
function UnitVarB:TFoo
begin
if not assigned(gUnitVarB) then
gUnitVarB := TFoo.Create;
result := gUnitVarB;
end;
finalization
if assigned(gUnitVarB) then
gUnitVarB.free; //or FreeAndNil(gUnitVarB);
end;
unit unitA;
// code..
implementation
uses
unitB;
var
A: TStringList;
//code...
...UnitVarB....
//code...
initialization
A:= TStringList.Create;
finalization
A.Free;
end.
me semble me rappeler quelque part que l'unité initialisations pourrait être coûteux en ce que si une unité que vous ne plus directement référence est toujours dans votre clause uses au cours d'une compilation, l'éditeur de liens intelligent ne sera pas retirez-le en raison de la section d'initialisation. Bien que cela puisse ne pas sembler si mauvais si chaque unité avait une section d'initialisation alors la plupart des programmes Delphi seraient MUCH plus grand qu'ils ne le sont déjà. Je ne dis pas ne pas les utiliser mais ma règle générale est de les utiliser avec parcimonie.
Votre exemple de code initial rompt cette règle. Je pensais que je le mentionnerais.
Ryan
a voté pour le «gestionnaire d'exception globale» note – frogb
Voir mon commentaire. Delhi ne garantit pas l'ordre. Votre note d'exception est vraie. – DiGi
Il est intéressant de noter que Madexcept récupère les exceptions soulevées dans les sections de finalisation. –