Um eine erneute
Exception eines anderen Typs zu werfen, jedoch die Daten der alten
Exception zu übernehmen,
könntest du einfach einen Kopierkonstruktor nehmen:
Delphi-Quellcode:
type
ESilentException =
class(
Exception)
public
..
constructor Create(oldException :
Exception);
..
end;
...
constructor ESilentException.Create(oldException :
Exception);
begin
Message := oldException;
...und was sonst noch wichtig wäre.
end;
So jetzt dein Code:
...
on E: EMyException
do
raise ESilentException.Create(E);
...
//auf höherer Ebene wäre Behandlung bei Bedarf noch möglich...
on E: ESilentException
do
begin
//Behandlung Stiller Exceptions z. B.
if E.OriginalException
is EMyException
then
HandleMyException;
end;
Und wenn du das stattdessen für eine Basisklasse XYException machst, und alle Exceptions davon ableitest :
EXYException = class(MyBaseExecption)
Dann brauchste den Kopierkonstruktor nicht für alle nötigen Exceptions implementieren.