![]() |
Delphi-Version: 10.2 Tokyo
Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Moin!
Delphi-Quellcode:
GrüßeCody
type
TMyTyp1 = type Cardinal; TMyTyp2 = type of Cardinal; |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Hilft Dir dieser Thread weiter?
![]() |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Zitat:
Zur Erklärung: Ich verwende gerne mal benannte Typen, um den Verwendungszweck eines Elements genauer zu definieren:
Delphi-Quellcode:
MaxLaufzeit könnte genausogut Sekunden sein, wäre immer noch ein Cardinal. Dann aber eben mit TSekunden angegeben.
type
TMinuten = type Cardinal; TSekunden = type Cardinal; TMyRec = record {...} MaxLaufzeit: TMinuten; end; Auch die zentrale Definition von Typen ist ja sinnvoll. Man erinnere sich nur an die Zeit, als Unicode dazu kam. Da hatten es Projekte deutlich leichter, die nicht mit
Delphi-Quellcode:
gearbeitet hatten sondern mit zentral definierten eigenen Typen.
var Variable: string
Nun habe ich aber auch immer wieder die Schreibweise mit type of gesehen, die ich bisher nie verwendet habe. Deshalb die Frage. |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Zitat:
Delphi-Quellcode:
erweitert und dann ausversehen auch für normalen Delphi Code aktiviert. Laut dem StackOverflow Thread handelt es sich hierbei um einen Bug. Zum
type of
Delphi-Quellcode:
generell:
type
Delphi-Quellcode:
type
// Alias TA = Integer; // Distinkter Typ TB = type Integer; |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Mit type of bekommst Du einen neuen Typ der nicht zum Original Kompatibel ist...
Beispiel:
Delphi-Quellcode:
Program testtype;
type tminuten = type cardinal; tSekunden = type of cardinal; procedure testCardinal(Value: cardinal); begin end; procedure testMinuten(Value: tminuten); begin end; procedure testSekunden(Value: tminuten); begin end; procedure Test; var c: cardinal; t: tminuten; s: tSekunden; begin testCardinal(c); testCardinal(t); testCardinal(s); // Fehler testMinuten(c); testMinuten(t); testMinuten(s); // Fehler end; begin Test; end. |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Zitat:
Insofern kann man das durchaus zu seinem Vorteil nutzen. Zum Beispiel in Methodenparametern, um schon beim Aufruf eine klar definierte Einheit zu signalisieren. |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Claro dann noch passende Helper und wieder ein bisschen mehr Sicherheit........
|
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Zitat:
|
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Delphi-Quellcode:
ist einfach nur ein Bug und ich möchte jedem davon abraten, das zu nutzen.
type of
Ein Typ, der mit
Delphi-Quellcode:
deklariert ist, wird vom Compiler als TypeKind tkClassRef behandelt.
type of
Delphi-Quellcode:
Wenn man mal beim Debuggen über die Variable vom Typ ct geht, sieht man, dass es ein Referenz und kein Ordinaltyp ist (vorm Zuweisen zeigts nil an und nicht 0).
uses
TypInfo; type Special = type Cardinal; CardinalType = type of Cardinal; var c: Cardinal; s: Special; ct: CardinalType; tk: TTypeKind; begin Writeln(GetEnumName(TypeInfo(TTypeKind), Ord(GetTypeKind(CardinalType)))); ct := Cardinal; // WAT?! ct := Special; // BOOM! end. Dass man trotzdem Ordinalvariablen zuweisen kann, liegt daran, dass es nunmal bugged ist. |
AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
Also auch noch eine verbuggte Altlast 8-) Dann war ich ja richtig das ich immer type ohne of verwendet habe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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