Zitat von
uligerhardt:
Wenn du so argumentierst, darfst du aber gar keine Assertions verwenden oder musst deine Anwendung mit eingeschalteten Assertions ausliefern..
Darum meinte ich ja, daß dieses nicht unbedingt ein optimaler Weg ist, um eventuelle Fehler abzuprüfen.
hmmmm, sowas geht leider nicht, da man hierfür ja den Typ vom Check-Parameter als Result bräuchte.
Delphi-Quellcode:
Function OCheck(O: TObject; Check: TClass): {TObject}; Inline;
Begin
Assert(O is Check);
Result := O;
End;
Delphi-Quellcode:
Function OCheck(O: TObject; Check: TClass): {TObject}; Inline;
Begin
{$IFOPT C+}
If Assigned(O) Then
Raise EAssertionFailed.CreateFmt('Object $%.8x "%s" is not %s',
[Integer(O), O.ClassName, Check.ClassName])
Else Raise EAssertionFailed.CreateFmt('Object (nil) is not %s', [Check.ClassName]);
{$ENDIF}
Result := O;
End;
Aber wieso Aufwand?
Wenn du einmal ein Assert(Sender is TButton) an den Anfang der Prozedur stellt, dann brauchst du danach doch nichts mehr machen?
Delphi-Quellcode:
Procedure X(Obj: TObject);
Var O: TButton absolute Obj:
Begin
Assert(Obj is TButton);
...
O.Caption := 'ich bin ein Button';
...
End;
Dieses prüft nur wärend der Programmierpfase und mit aktiven Assertions.
Wobei ich es meißt eher so mach:
Delphi-Quellcode:
Procedure X(Obj: TObject);
Var O: TButton absolute Obj:
Begin
If Obj is TButton Then Begin
...
O.Caption := 'ich bin ein Button';
...
End Else {mach was, wenn es kein Button ist};
End;