Ja, ein bissl komisch ist das schon, aber im Prinzip ist das hier nur ein "lokaler" gecasteter Alias für
System.ExceptObject (aktuelles
Exception-Objekt).
Stell es dir als eine Art Makro vor, welches intern die Variablen anlegt, vergleicht und castet.
Delphi-Quellcode:
begin
try
// böses Zeug
except
on E: EFileNotFoundException do
E.Kaputt;
on E: EProgrammerNotFound do
E.FaulerSack;
else
raise;
end;
end;
Delphi-Quellcode:
begin
try
// böses Zeug
except
if ExceptObject is EFileNotFoundException then
EFileNotFoundException(ExceptObject).Kaputt
else if ExceptObject is EProgrammerNotFound then
EProgrammerNotFound(ExceptObject).FaulerSack
else
raise;
end;
end;
Delphi-Quellcode:
var
E: EFileNotFoundException;
E2: EProgrammerNotFound;
begin
try
// böses Zeug
except
if ExceptObject is EFileNotFoundException then begin
E := EFileNotFoundException(ExceptObject);
E.Kaputt;
end else if ExceptObject is EProgrammerNotFound then begin
E2 := EProgrammerNotFound(ExceptObject);
E2.FaulerSack;
end else
raise;
end;
end;
Delphi legt ja auch so öfters mal "unsichtbare" lokale Variablen an,
sei es bei
a := b + c * d
, wo das Ergebnis von c*d ja quasi in einer Zwischenvariable landet,
oder der Enumerator einer For-In-Schleife und vorallem beim
with
.