Thema: Delphi Casts - is, as, Assert

Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Casts - is, as, Assert

  Alt 4. Feb 2010, 10:08
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).
Uli Gerhardt
  Mit Zitat antworten Zitat