Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu mehreren Try's (https://www.delphipraxis.net/71755-frage-zu-mehreren-trys.html)

SirThornberry 20. Jun 2006 19:25

Re: Frage zu mehreren Try's
 
es muss auch nicht immer finally sein. folgendes geht auch:
Delphi-Quellcode:
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;
Eben aus diesem Grund ist mir bis heute unbekannt wozu "finally" im zusammenhang mit "try" überhaupt existiert.

Stefan Hueg 20. Jun 2006 19:32

Re: Frage zu mehreren Try's
 
Zitat:

Zitat von DGL-luke
*sich von Khabarakh bestätigt sieht*

Ein Ressourcenschutzblock sieht (bei mir) so aus:

Delphi-Quellcode:
objekt := TObjekt.Create;
try
  objekt.dosomething;
  objekt.accessfragilethings;
finally
  objekt.Free;
end;
;)

(für ein zusätzliches except muss man tatsächlich schachteln! Zumindest bei D2005PE)

Das geht grundsätzlich, nur ist damit nicht sichergestellt ob das Objekt vorher überhaupt instanziert wurde, kann also zum Fehler führen ;)

Hawkeye219 20. Jun 2006 19:38

Re: Frage zu mehreren Try's
 
Dann mache es doch so:
Delphi-Quellcode:
try
  objekt := TObjekt.Create;
  try
    objekt.dosomething;
    objekt.accessfragilethings;
  finally
    objekt.Free;
  end;
except
  ShowMessage ('Fehler');
end;
Damit ist sichergestellt, daß objekt freigegeben wird, falls es erzeugt werden konnte.

Gruß Hawkeye

inherited 20. Jun 2006 20:29

Re: Frage zu mehreren Try's
 
^Shmia würde euch für diese art von aufruf von try...except lynchen... siehe sein TUTORIAL

Khabarakh 20. Jun 2006 20:37

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.

Stefan Hueg 20. Jun 2006 21:03

Re: Frage zu mehreren Try's
 
Zitat:

Zitat von inherited
^Shmia würde euch für diese art von aufruf von try...except lynchen... siehe sein TUTORIAL

und @Khabarakh:

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:
try
  objekt := TObjekt.Create;
  try
    objekt.dosomething;
    objekt.accessfragilethings;
  finally
    objekt.Free;
  end;
except
  ShowMessage ('Fehler');
end;
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.

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.

Khabarakh 20. Jun 2006 21:13

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: .

Stefan Hueg 20. Jun 2006 21:15

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?

DGL-luke 20. Jun 2006 21:53

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.
Seite 2 von 2     12   

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