![]() |
Feststellen, ob Objekt schon erzeugt wurde
Moin,
wie kann ich innerhalb einer Prozedur erkennen, ob das Objekt, welches verwendet werden soll, schon erzeugt wurde? Die Prozedur soll beispielsweise Elemente zu einer Objectlist hinzufügen und dazu am Anfang entweder die List erzeugen, oder wenn sie schon existiert, sie leeren. Ist es gültig, den Zeiger auf das Objekt einfach auf Nil zu überprüfen? Oder das objectlist.clear in ein try-except Konstrukt schieben und bei einer Exception die Liste erzeugen? Das erscheint mir aber alles nicht so optimal. Danke für eure Hilfe! |
Re: Feststellen, ob Objekt schon erzeugt wurde
Wenn die Liste die Objekte besitzt, sollte .Clear die richtige Methode sein
|
Re: Feststellen, ob Objekt schon erzeugt wurde
Hi,
Delphi-Quellcode:
ist besser als auf nil zu prüfen.
var obj:TObject;
if assigned(obj) then obj.tuwas; Viele Grüße, Benjamin |
Re: Feststellen, ob Objekt schon erzeugt wurde
Zitat:
Grüsse, Dirk |
Re: Feststellen, ob Objekt schon erzeugt wurde
Oh, stimmt. Schade.
Warum verwendet man dann das und nicht die überprüfung auf nil? |
Re: Feststellen, ob Objekt schon erzeugt wurde
Weil es hübscher ist.
|
Re: Feststellen, ob Objekt schon erzeugt wurde
Ausserdem kann Assigned() noch ein wenig mehr. So kann man z.B. prüfen ob ein Event bereits zugewiesen ist (if Assigned(ButtonOnClick)...) was man nicht mit einem Test auf "nil" machen kann.
Wenn man nun einmal Assigned() einsetzen muss, ist es nur konsequent es auch da zu tun wo man es kann. Das ist dann einheitlicher und damit "hübscher" :wink: |
Re: Feststellen, ob Objekt schon erzeugt wurde
Zitat:
Delphi-Quellcode:
if Button1.OnClick = nil
|
Re: Feststellen, ob Objekt schon erzeugt wurde
Zitat:
Das ganze wird mit einer Prise Compiler-Magie verwaltet. EDIT: wenn man "if Button1.OnClick = nil" benutzt, geht der Compiler ausserdem davon aus, dass "OnClick" eine Methode ist die aufgerufen werden soll - compilliere es mal! => [DCC Error] Unit33.pas(97): E2035 Not enough actual parameters EDIT2: schau mal hier: ![]() EDIT3: des Grund, dass man Assigned nehmen muss ist wohl eher der, dass der Ausdruck vom Compiler als Methodenaufruf augewertet wird |
Re: Feststellen, ob Objekt schon erzeugt wurde
Zitat:
Zum assigned: Das kannte ich noch nicht. Allerdings werden ja die Zeiger beim zerstören des Objekts nicht wieder auf nil gesetzt, darauf fällt assigned dann auch rein. Also müsste ich nach dem zerstören eines Objektes am besten auch gleich den Zeiger auf nil setzen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 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 by Thomas Breitkreuz