![]() |
Object create -> nil
Guten Abend,
ich habe ein Object ähnlich dem folgenden definiert.
Delphi-Quellcode:
Der constructor create schaut dem ähnlich.
type
TMyObject = class privat function checkSomeThing:Boolean; public constructor create; destructor destroy; override; end;
Delphi-Quellcode:
Was ich möchte ist, dass create nil wird wenn
constructor TMyObject.create;
begin inherited; if checkSomeThing then begin // do some initial things end else begin // delete object and return nil end; end; checkSomeThing false liefert. Wie kann ich das machen? Wenn ich in den else Zweig inherited destroy schreibe wird weiterhin ein Pointer auf das Object zurückgeliefert. Ich würde aber gerne im nachfolgenden Code mit
Delphi-Quellcode:
Sieht da jemand eine Möglichkeit wie das zu realisieren wäre?
if assigned(MyObject) then
// ... else // ... Grüße Klaus |
Re: Object create -> nil
Zitat:
|
Re: Object create -> nil
In einem Konstruktor hat imho die Logik nix zu suchen.
Instantiiere das Objekt, prüfe ob es legal ist und schmeiss es weg. Oder erledige die Prüfung vorher über eine Class Function. Ich meine, ich fang doch nicht an, mir eine Pizza zu machen, wenn ich dann feststelle, das kein Käse da ist. Entweder will ich ne Pizza machen (Instantiierung), Checke die Zutaten (Prüfung) und verwerfe ggf. meinen Plan (Destroy), oder ich prüfe (Class Function), ob alle Zutaten für die Pizza vorhanden sind und mache mich DANN ggf. ans Werk (Instantiierung). Grad heute hatten wir eine solche Grundlagendiskussion. Unser Fazit: Logik raus aus dem Konstruktor. Eine Class Factory ist in jedem Fall auch eine Alternative und auch besser geeignet, die Logik (Soll ich? Soll ich nicht?) zu kapseln. |
Re: Object create -> nil
Du könntest eine class function benutzen. In der function erzeugst du das Objekt (result) dann ganz normal, kannst aber auch nil setzen weil es ja in deiner Hand liegt, was du mit dem result machst.
Oder wäre das eine "Class Factory"? :oops: |
Re: Object create -> nil
Danke für die Hinweise,
ich habe das ersteinmal mit eine Class function gelöst. Werde mir aber auch noch die Class factory genauer anschauen. Gute Nacht Klaus |
Re: Object create -> nil
Zitat:
du kannst ja eine normale (Klassen-)Funktion dafür verwenden und Create darin aufrufen:
Delphi-Quellcode:
Hab ich allerdings so noch nicht getestet.
function TMaybe.CreateOrNot : TMaybe;
begin if CheckSomething then Result := Create else Result := nil; end; Gruss Reinhard |
Re: Object create -> nil
Hallo
Es gab da mal früher, eventuell heute noch, die Standardprozedur "FAIL" welche nur innerhalb eines Konstructors aufgerufen werden durfte und selbigen Konstruktor "abbrach" ... Also bei Interesse in der Hilfe nachschauen. ...aber... Ich persönlich halte davon NICHTS, weil das meiner Meinung nach ein schlechter Programmierstil ist. ->
Delphi-Quellcode:
Siehe auch Beitrag von alzaimar!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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