Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Kann operator "as T" fehlschlagen, wenn operator "is T" OK war ?

  Alt 28. Jul 2022, 13:59
Wenn man das Objekt freigegeben hat (Free),
dann kann IS immernoch ein TRUE liefern, wenn im Speicher immernoch der Rumpf des Objektes existiert (nicht bereits überschrieben wurde).

AS würde dort auch noch funktionieren, aber der Zugriff auf dieses eigentlich "nicht mehr vorhandene" Objekt kann natürlich dennoch knallen.


Aber hier etwas beim Zugriff machen zu wollen ist nahezu unmöglich.
Der Fehler liegt diesbezüglich schon weit vorher, dort wo freigegeben, aber die Variable nicht geNILt wurde.




IS und AS verhalten sich nahezu gleich.
Alles was IS erlaubt, ist dann bei AS auch möglich.

Nur beim NIL verhalten sie sich unterschiedlich.
IS liefert bei NIL ein FALSE, während AS das NIL ohne Fehlermeldung durchlassen würde.

Delphi-Quellcode:
if (ASender is TButton) or not Assigned(ASender) then
begin
  LBtn1 := TButton(ASender); // oder LBtn1 := (ASender as TButton) ... funktioniert immer, aber ist "unnötig", da IS bereits geprüft hatte
end;
$2B or not $2B

Geändert von himitsu (28. Jul 2022 um 14:03 Uhr)
  Mit Zitat antworten Zitat