Mir ist das immer OK erschienen: Während der Entwicklungs- und Testphase prüft mein Ereignishandler, dass ihm auch wirklich nur Buttons reingereicht werden. Danach bin ich hinreichend davon überzeugt, dass meine Programmierung passt, und kan auf die Typprüfung verzichten.
Zitat von
himitsu:
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;
Mit so Ähnlichem hab ich auch schon rumgespielt. Aber ich fürchte, ohne Compilerunterstützung ist da nix zu machen. :-/
Zitat von
himitsu:
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?
Naja, das sind halt trotzdem 2, im echten Leben manchmal auch 3 oder 4 Zeilen, wo meinem Empfinden nach eine reichen müsste. Und das Ganze mit reichlich Wiederholungen (== Fehlerquellen).