![]() |
Typumwandlung Unterschied
Hallo zusammen,
nach mehrjähriger Programmierabstinenz bin ich wieder nun wieder am Basteln... Meine Delphikenntnisse sind allerdings etwas eingerostet: Ist die Anweisung
Delphi-Quellcode:
DocStatus(iam as Document)
identisch zu
Delphi-Quellcode:
DocStatus(Document(iam))
oder gibt es da doch einen Unterschied? Compilieren tut beides, scheint auch zu funktionieren, allerdings meine ich, daß da was war... Ich wünsche weiterhin einen sonnigen Feiertag! |
AW: Typumwandlung Unterschied
...gibt es da doch einen Unterschied? JA
Mit "DocStatus(iam as Document)" hast du den kleinen Vorteil, das der Compiler zusätzlich zur Laufzeit prüft, ob "iam" denn rein OO basiert zu "Document" werden kann. Bei DocStatus(Document(iam)) könnte "iam" auch ein simpler "Integer" oder typloser "Pointer" sein, da bist du zur Laufzeit allein verantwortlich, das der doppelte HARTE cast auch gut geht. Wenn man weiß was man tut, ist letzteres auch schneller. Nur wenn Mr/Mrs X an vorheriger Struktur/Position Y im Quelltext ändern, fliegt dir irgendwann irgendwo später dein harter "DocStatus" cast eh um dir Ohren, sicherheitstechnisch spielt der innere cast eh schon mit etwas Risiko(vor allem wenn du das ohne try... drumherum machst) |
AW: Typumwandlung Unterschied
Super, danke für die Info!
:-D Ich wusste doch daß da was war... (kam allerdings nicht mehr drauf) |
AW: Typumwandlung Unterschied
Delphi-Quellcode:
= static cast / feste bzw. harte Typkonvertierung
type(variable)
Delphi-Quellcode:
= dynamic cast / dynamische bzw. weiche Typkonvertierung
variable as type
Delphi-Quellcode:
= Typprüfung ... arbeitet fast gleich wie AS,
variable is type
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz