Bonjour
Comment fait-on dans un constructeur pour rien construire
et renvoyer nil (bien qu'un constructeur ne renvoie rien) ?
Merci
Jean-Philippe
Bonjour
Comment fait-on dans un constructeur pour rien construire
et renvoyer nil (bien qu'un constructeur ne renvoie rien) ?
Merci
Jean-Philippe
Tu ne peux pas, c'est impossible.
Si tu veux indiquer qu'un constructeur a échoué, déclenche une exception au sein du constructeur, que tu traites là où tu l'appelles.
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
je ne sais pas si ça répond à ton besoin, mais une fonction peu peut-être t'aider...ou une fonction de classe si tu préfères
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function CreateMonObject:TMonObject; begin if (Condition=TRUE) then Result:=TMonObject.Create else Result:=nil; end;
D'ailleur quel est le but de cette operation ?
Pourquoi souhaite tu renvoyer Nil ?
Peut etre que nous pourrions trouver d'autres solutions plus propre a ton probleme![]()
Lorsque tu as une exception dans un constructeur, cela appele normalement un Destroy (il doit géré les libérations partiellement via Assigned et nil)
je pensais qu'il manque un inherited dans ton constructeur
sinon dans l'idée de Paul TOTH, j'ai fait ceci, une méthode de classe qui sert d'encapsulation à un constructeur (c'est pas comme ça que je voulais faire au début mais bon)
"TEpcPersistantDBProvider.Provider.Load" peut ré-instancier l'objet (ou libérer et affecter à nil car erreur), la classe permet d'identifier la table, mais celle-ci peut contenir plusieurs classes héritées ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 {* ----------------------------------------------------------------------------- La Fonction Load renvoie une Instance de Persistant selon un ID, la Classe Receveuse de la Méthode détermine l'ancêtre Minimum à récupérer @param ID AutoInc Primary Key identifiant l'Objet dans sa Table @return Renvoie un Persistant ou nil si pas Trouvé ------------------------------------------------------------------------------ } class function TEpcPersistant.Load(const ID: TepcPersistantIDType): TEpcPersistant; begin Result := Self.Create(nil); if TEpcPersistantDBProvider.Provider.Load(Result, ID) and Assigned(Result) and Result.InheritsFrom(Self) then Result.InternalLoad(ID) else if Assigned(Result) then begin Result.Free(); Result := nil; end; end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Partager