Da kann man sicherlich geteilter Meinung sein. Ich persönlich mag Klassen, die in ihren Methoden Exceptions werfen absolut nicht. Ich meine normalerweise würde man folgendes machen:
Delphi-Quellcode:
var
Container: TContainer;
begin
Containter := TContainer.Create(FileName);
try
if not Container.InvalidFile then
begin
end;
finally
Container.Free;
end;
end;
Einen spezifischen Fehlercode kann man zur not auch noch irgendwo hinterlegen.
OMG
Zuerst zu dem Fehlercode: Das läuft auf das Gleiche hinaus wie die Property. Man kann sie ignorieren. Und das ist nicht gut. Unter anderem aus diesem Grund gibt es ja gerade die Exceptions, damit nicht jede Klasse ihren eigenen Fehlermechanismus implementieren muss.
Das zweite: Man lässt den Code einfach mal laufen und guckt dann nachher, ob es einen Fehler gegeben hat. Warum nicht vorher prüfen?
Delphi-Quellcode:
var
Container: TContainer;
begin
if Fileexists(FileName) then
begin
Containter := TContainer.Create(FileName);
try
//Was machen
finally
Container.Free;
end;
end;
end;
Falls die Prüfung vorher tatsächlich nicht gewünscht ist, geht immer noch das hier:
Delphi-Quellcode:
try
Containter := TContainer.Create(FileName);
except end;
If Containter=NIL
Then
ShowMessage('
Containter is NIL')
Else
ShowMessage('
Containter is NOT NIL');
Containter.DoSomething;
//..erzeugt Exception!
Wenn der Konstruktor eine
Exception wirft, wird die Variable nicht verändert - bleibt also nil.
Der Zugriff am Ende erzeugt aber immer noch eine
AV.