Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Typumwandlung Unterschied

  Alt 1. Jan 2020, 19:49
type(variable) = static cast / feste bzw. harte Typkonvertierung

variable as type = dynamic cast / dynamische bzw. weiche Typkonvertierung

variable is type = Typprüfung ... arbeitet fast gleich wie AS,
außer dass AS ein NIL als leer erfoglreich konvertiert, während IS dieses als unterschiedlich abweißt.



Beim harten Cast wird direkt beim Kompilieren der Typ geändert. Hier tritt ein Fehler/Warnung nur im Compiler auf, aber zur Laufzeit passiert hier nichts mehr.
Es wird alles nahezu ungeprüft umgeschrieben, egal ob die Typen nicht zusammenpassen.
DU bist für alles Verantwortlich. Manchmal gibt der Compiler nur abschaltbare Warnungen, wenn er "Problemchen" erkennt.
Es gibt nur dann einen Fehler/Compilererabbruch, wenn die Größe des neuen Types größer ist, als der des Ursprungstyps (die Ausnahme stellen hier ordinale Typen wo der Compiler weiß wie er die neuen Bits auffüllen kann).


Die weichen Casts gibt es nur für Objekte (Klassentypen). Hier wird zur Laufzeit der tatsächliche Inhalt der Variable geprüft, ob es zusammenpasst und endet eventuell in einer Exception.
Info: Inzwischen funktioniert dieses auch für Interfaces. Dafür gibt es für Delphi-Objekte ein virtuelles Interface, über welches aus einem Interface vorher ein TObjekt rausgeholt und dann gecastet wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat