![]() |
Re: Frage zu mehreren Try's
es muss auch nicht immer finally sein. folgendes geht auch:
Delphi-Quellcode:
Eben aus diesem Grund ist mir bis heute unbekannt wozu "finally" im zusammenhang mit "try" überhaupt existiert.
try
objekt := TObjekt.Create; try objekt.dosomething; objekt.accessfragilethings; except ShowMessage('Fehler beim arbeiten mit dem Object'); end; objekt.Free; except ShowMessage('Fehler beim erstellen des Objectes'); end; |
Re: Frage zu mehreren Try's
Zitat:
|
Re: Frage zu mehreren Try's
Dann mache es doch so:
Delphi-Quellcode:
Damit ist sichergestellt, daß objekt freigegeben wird, falls es erzeugt werden konnte.
try
objekt := TObjekt.Create; try objekt.dosomething; objekt.accessfragilethings; finally objekt.Free; end; except ShowMessage ('Fehler'); end; Gruß Hawkeye |
Re: Frage zu mehreren Try's
^Shmia würde euch für diese art von aufruf von try...except lynchen... siehe sein TUTORIAL
|
Re: Frage zu mehreren Try's
@SirThornberry: Naja, es kommt sehr selten vor, dass man eine Exception in der Methode, die sie wirft, auch wieder auffängt. Also hat try-finally schon seine Berechtigung.
@Stefan Hueg: Nope, DGL-Lukes Methode ist dicht wie Wasser ... äh :stupid: ... wasserdicht. Wird eine Exception im Konstruktor ausgelöst, wird der Schutzblock gar nicht mehr ausgeführt. |
Re: Frage zu mehreren Try's
Zitat:
Habe mir sein Tutorial mal durchgelesen, dort wird der Konstruktor nicht in den Resourcenschutzblock aufgenommen. In meinem genannten Programm kann ja, rein theoretisch, der Konstruktor von TIniFile ja zum Fehler führen (aus welchen Gründen auch immer). Daher möchte ich ihn gerne in einen separaten Schutzblock aufnehmen. Das Beispiel
Delphi-Quellcode:
erscheint mir dabei sinnvoll. Es wird sowohl der Konstruktor als auch der Rest sicher geschützt. Elegant oder nicht, es ist meines Erachtens nach wasserdichter als wenn man den Konstruktor einfach nur Konstruktor sein lässt und seinem Schicksal überlässt.
try
objekt := TObjekt.Create; try objekt.dosomething; objekt.accessfragilethings; finally objekt.Free; end; except ShowMessage ('Fehler'); end; Ich kann mich auch täuschen, aber ich versuche nur (bitte dafür nich hauen) das Programm so wasserdicht wie möglich zu machen. Dabei ist es die Frage, was man nicht explizit schützen muss, und beim Konstruktor bin ich mir eben unsicher. |
Re: Frage zu mehreren Try's
Wie schon gesagt, DGL-Lukes Methode ist wirklich wasserdicht. Du verwechselst/vermischst da zwei Sachen, ein try-except-Block ist kein Ressourcenschutzblock.
Der Block in deinem Beispiel schützt nichts, außer vielleicht den Benutzer vor dem Standard-Exception-Dialog :stupid: . |
Re: Frage zu mehreren Try's
Irgendwie will das nicht in meinen Kopf...Schlägt der Konstruktor fehl kann man das Objekt nicht freigeben da es erst gar nicht instanziert wurde -> Fehler entsteht der nicht behandelt wird?
|
Re: Frage zu mehreren Try's
Nein... löst der Konstruktor eine Exception aus, wird die Prozedur abgebrochen -> das "try" wird gar nicht angeschnitten -> das finally auch nicht -> es wird nicht versucht, etwas freizugeben. Die Exception bubbelt sich dann ihren Weg hinauf, eventuell bis zur messagebox.
Und nochwas: Wenns schon im Konstruktor knallt, kann mans eh vergessen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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