AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Typumwandlung Unterschied

Ein Thema von Berni68 · begonnen am 1. Jan 2020 · letzter Beitrag vom 1. Jan 2020
Antwort Antwort
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

Typumwandlung Unterschied

  Alt 1. Jan 2020, 12:40
Hallo zusammen,

nach mehrjähriger Programmierabstinenz bin ich wieder nun wieder am Basteln...
Meine Delphikenntnisse sind allerdings etwas eingerostet:

Ist die Anweisung

DocStatus(iam as Document)

identisch zu

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!
Bernhard
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: Typumwandlung Unterschied

  Alt 1. Jan 2020, 12:52
...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)
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Typumwandlung Unterschied

  Alt 1. Jan 2020, 13:01
Super, danke für die Info!

Ich wusste doch daß da was war...
(kam allerdings nicht mehr drauf)
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Typumwandlung Unterschied

  Alt 1. Jan 2020, 18: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz