Exception-Klassen verarbeiten

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Exception-Behandlungsroutinen erstellen

Exceptions werden in Delphi stets durch Klassen repräsentiert. Folglich arbeiten Sie normalerweise mit einer Hierarchie von Exception-Klassen. Beispielsweise definiert die VCL die Exception-Klasse ERangeError als Nachkomme von EIntError.

Wenn Sie für eine Exception-Basisklasse eine Exception-Behandlungsroutine erstellen, dann fängt diese nicht nur Instanzen jener Basisklasse ab, sondern auch Instanzen aller davon abgeleiteten Klassen. Die folgende Exception-Behandlungsroutine behandelt beispielsweise alle Exceptions, die bei Rechenoperationen mit Integerwerten auftreten können, einschließlich ERangeError, EDivByZero und EIntOverflow:



 try
 { Anweisungen mit Integer-Operationen }
 except
   on EIntError do { Behandlung von Fehlern bei Integer-Operationen };
 end;



 try
 {
   // Anweisungen mit Integer-Operationen
 }
 catch (EIntError &E)
 {
   // Behandlung von Fehlern bei Integer-Operationen
 }



Sie können Fehlerbehandlungsroutinen für die Basisklasse mit speziellen Routinen für spezifischere abgeleitete) Exception-Klassen kombinieren. Hierzu ordnen Sie die catch-Anweisung in der Reihenfolge an, in der sie durchsucht werden sollen, wenn eine Exception ausgelöst wird. Der folgende Block definiert beispielsweise eine spezielle Behandlung für Bereichsfehler. Alle anderen Fehler bei Integer-Operationen werden mit einer allgemeinen Behandlungsroutine abgefangen:



 try
 { Anweisungen mit Integer-Operationen }
 except
   on ERangeError do { Bereichsfehlerbehandlung };
   on EIntError do { Behandlung anderer Fehler bei Integer-Operationen };
 end;



 try
 {
   // Anweisungen mit Integer-Operationen
 }
 catch (const ERangeError &rangeErr)
 {
   // Bereichsfehlerbehandlung
 }
 catch (const EIntError &intErr)
 {
   // Behandlung anderer Fehler bei Integer-Operationen
 }



Wird die Behandlungsroutine für EIntError vor der Behandlungsroutine für ERangeError definiert, erreicht die Anwendungsausführung nie die spezifische Behandlungsroutine für ERangeError, weil ERangeError von EIntError abgeleitet ist.

Siehe auch