Thema: Delphi Casts - is, as, Assert

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#7

Re: Casts - is, as, Assert

  Alt 4. Feb 2010, 09:51
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat