![]() |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Schön zu lesen, dass sich nicht alle unbedingt an irgendwelche Vorgaben halten die irgendjemand irgendwann mal in die Welt geworfen hat.
Was in meinem Konstruktor passiert sind kleinere Überprüfungen, Stringmanipulationen und das Erzeugen eines Threads. Mehr nicht. Dafür, um das jetzt schön sauber zu bekommen, zerbreche ich mir jetzt nicht Tage lang den Kopf. |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Wie wäre es mit einer Funktion, die man dazwischen Schaltet. Sprich eine Funktion die den String überprüft und wenn der String Valied ist wird der Constructor aufgerufen und wenn nicht gibt die Funktion Nil zurück.
Ich bin ein Fan davon nur richtige Werte an einen Constructor zu übergeben und mögliche "Fehlerquellen" vorher auszuschließen. |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Ich versuche es mal.
Am liebsten wäre es mir natürlich, wenn meine ObjectList Records (mit class vars und class functions/procedures) aufnehmen könnte statt Klasseninstanzen. Dann hätte ich das ganze Problem erst gar nicht. |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Zitat:
|
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Ich versuche es heute Nachmittag mal.
Schade nur, dass ich dann den Destructor verliere, oder ist dem nicht so? Eigentlich bin ich ganz zufrieden so wie es jetzt ist. |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
warum Destructor verlieren?
In der Class-Function mußt du natürlich auch einmal den Constructor ausführen, um die Instanz zu erstellen, und bei deren Freigabe kommt dann der Destructor. Aber du kannst in der Class-Funktion beim Fehler entweder die Anstanz garnicht erst erstellen oder sie gleich wieder freigeben und dann eben dein NIL zurück liefern. |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Eigentlich gibt es doch nur diese beiden Grund-Varianten, abhängig davon wie der weitere Programmablauf sein soll:
Delphi-Quellcode:
In beiden Varianten wird im Fehlerfall die Liste nicht erweitert. Genau für solche Fälle ist eine Exception im Constuctor doch die richtige Lösung.
procedure ErzeugeObjekte(AParams: TStrings);
var s: string; {Vartiante1} begin while s in APrams do begin try GenerischeTObjectList.Add(Klasse.Create(s)); except {Excpetion loggen oder so} end; end; end; {Vartiante2} begin try while s in APrams do begin GenerischeTObjectList.Add(Klasse.Create(s)); end; except {Excpetion loggen oder so} end; end; |
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Eine einfache Variante wäre eine Factory-Klassenmethode TKlasse.TryGetInstance, dass die passenden Parameter bekommt. Nur, wenn diese erfolgreich zurückgibt, benutzt du die Instanz und fügst sie in die Liste hinzu. Dann kannst du auch die String Analyse aus dem Constructor herauslösen, weil es ja ohnehin in der Klassenmethode gekapselt ist.
|
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Wie würde man so eine Factory-Klasse auf meinen Fall aufbauen?
|
AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz