Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Feststellen dass neuer Typ nur ein Alias ist (https://www.delphipraxis.net/185640-feststellen-dass-neuer-typ-nur-ein-alias-ist.html)

Der schöne Günther 26. Jun 2015 09:58

Delphi-Version: XE7

Feststellen dass neuer Typ nur ein Alias ist
 
Angenommen ich habe eine Typdefinition
Delphi-Quellcode:
type TMyType = type Single;
Es ist also kein einfacher Alias wie
Delphi-Quellcode:
type TMyType = Single
.

Wie kann ich nun, zur Laufzeit, feststellen dass
Delphi-Quellcode:
TMyType
in Wirklichkeit nichts anderes ist als ein Single? Ich kann ja auch problemlos in eine Single-Variable einen
Delphi-Quellcode:
TMyType
-Wert reinstecken und es kompiliert.

(Ich lasse meine Motivation dafür absichtlich weg um es nicht unnötig kompliziert zu machen)

mkinzler 26. Jun 2015 10:01

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Die beiden Typen sind für Delphi 2 verschiedene Typen

Der schöne Günther 26. Jun 2015 10:06

AW: Feststellen dass neuer Typ nur ein Alias ist
 
So verschieden können sie aber wohl doch nicht sein wenn folgendes geht, oder?

Delphi-Quellcode:
type
   TNewType = type Single;
var
   mySingle:   Single;
   myNewType:   TNewType;
begin
   myNewType := mySingle;
   mySingle := myNewType;
end.

mkinzler 26. Jun 2015 10:10

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Für den Delphicompiler schon.

Z.B. ist auch folgendes nicht kompatibel:

Delphi-Quellcode:
type
  TStringArray: Array of string;
...
var
  a1: TStringArray;
  a2: Array of String;

...

  a1 := a2;

Der schöne Günther 26. Jun 2015 10:17

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Die übertriebene Typsicherheit bei Arrays hätte ich spontan als anderes Thema gesehen, aber ich komme frisch aus dem Urlaub- Vielleicht ist mein Kopf noch nicht wieder ganz da.

Heißt das- Der "Delphi-Compiler" kann es, der Mensch vor der Tastatur allerdings nicht? Mann, ich lege einfach zwei lokale Variablen an und weise sie einander zu. Und vergleiche
Delphi-Quellcode:
SizeOf(..)
. Sollte jemand die Definition für
Delphi-Quellcode:
TMyType
eines Tages von Single auf Double ändern wird im dieser Code hier um die Ohren fliegen.

Das muss wohl reichen, besser scheint es ja nicht zu gehen.

BUG 26. Jun 2015 10:17

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Zitat:

Zitat von mkinzler (Beitrag 1306685)
Die beiden Typen sind für Delphi 2 verschiedene Typen

Aber wie sieht es ab Delphi 3 aus? (SCNR)

Zitat:

Zitat von Der schöne Günther (Beitrag 1306688)
So verschieden können sie aber wohl doch nicht sein wenn folgendes geht, oder?

Das zwei Typen zuweisungskompatibel sind, heißt nicht das sie "gleich" sind. Denk dir zum Bespiel einen BCD-Zahlentyp und einen Integer; die könnten zuweisungskompatibel sein (k.A. ob man das in Delphi hinbekommt), sind aber intern völlig unterschiedliche Datentypen.

Der schöne Günther 26. Jun 2015 10:25

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Zitat:

Zitat von BUG (Beitrag 1306691)
Das zwei Typen zuweisungskompatibel sind, heißt nicht das sie "gleich" sind.

Du hast natürlich Recht. Noch besseres Beispiel: Ich kann einen Integer in einen Double reinstecken (diese Richtung). Aber sonst haben die eigentlich nichts gemeinsam.

Warum ist die Welt nur so schlecht...

BadenPower 26. Jun 2015 10:30

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Sorry für OT, aber dass kann ich mir jetzt nicht verkneifen.
Zitat:

Zitat von BUG (Beitrag 1306691)
Zitat:

Zitat von mkinzler (Beitrag 1306685)
Die beiden Typen sind für Delphi 2 verschiedene Typen

Aber wie sieht es ab Delphi 3 aus? (SCNR)

Ich musste den Satz von Markus 3mal lesen, um ihn so "misszuverstehen", wie man es scheinbar kann.

Der gleiche Wort-Witz hätte nicht mit Lazarus funktioniert.

Mikkey 26. Jun 2015 10:36

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Die Ausgangsfrage lässt sich allerdings beantworten:

Delphi-Quellcode:
type
  myTyp = Single;
var
  ti1, ti2: ^TTypeInfo;
begin
  ti1 := TypeInfo(myTyp);
  ti2 := typeInfo(Single);
  if ti1.Name <> ti2.Name then
    writeLn('verschieden');
Sorry, mit
Delphi-Quellcode:
myTyp = type Single;
klappt das nicht.

uligerhardt 26. Jun 2015 10:46

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1306688)
So verschieden können sie aber wohl doch nicht sein wenn folgendes geht, oder?

Delphi-Quellcode:
type
   TNewType = type Single;
var
   mySingle:   Single;
   myNewType:   TNewType;
begin
   myNewType := mySingle;
   mySingle := myNewType;
end.

Ich glaube, mit var-Parametern solltest du einen Unterschied sehen.

himitsu 26. Jun 2015 11:58

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Zitat:

Zitat von Mikkey (Beitrag 1306697)
Delphi-Quellcode:
  ti1 := TypeInfo(myTyp);
  ti2 := typeInfo(Single);
  if ti1.Name <> ti2.Name then

Bei Typen niemals Namen vergleichen. (maximal nur mit voll qualifizierten Namen, also inkl. Namespace)

Nur weil etwas gleich heißt, muß es nicht das Gleiche Selbe sein.
Delphi-Quellcode:
if TypeInfo(myTyp) <> TypeInfo(Single) then

D-User 26. Jun 2015 15:04

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Zitat:

Zitat von BUG (Beitrag 1306691)
Zitat:

Zitat von mkinzler (Beitrag 1306685)
Die beiden Typen sind für Delphi 2 verschiedene Typen

Aber wie sieht es ab Delphi 3 aus? (SCNR)

Zitat:

Zitat von Der schöne Günther (Beitrag 1306688)
So verschieden können sie aber wohl doch nicht sein wenn folgendes geht, oder?

Das zwei Typen zuweisungskompatibel sind, heißt nicht das sie "gleich" sind. Denk dir zum Bespiel einen BCD-Zahlentyp und einen Integer; die könnten zuweisungskompatibel sein (k.A. ob man das in Delphi hinbekommt), sind aber intern völlig unterschiedliche Datentypen.

"die könnten zuweisungskompatibel sein (k.A. ob man das in Delphi hinbekommt),":
man nehme einen Record und packe ein Case-Statement hinzu, das ist durchaus auch ein Zweck von diesem Konstrukt soweit ich das mitbekommen habe. Und das seit Anfangs-Pascal-Zeiten.
Dann kann man sich die Typen genau angucken, analysieren und sonst was mit machen.
Zusätzlich kann man noch ne Prozedur nehmen, die jew. einen ge-casten(nicht ge-casteten) Typ liefert/ auf diesem operiert und bel. transformierte Daten liefert. Ich liebe Delphi.

Der schöne Günther 14. Jul 2015 15:46

AW: Feststellen dass neuer Typ nur ein Alias ist
 
Könnte man den neuen Typen irgendwie ein Attribut verpassen? Etwas wie

Delphi-Quellcode:
type
   [IstAliasFür( TypeInfo(Single) )]
   TFloat = type Single;
habe ich versucht, aber lustigerweise ergibt die Auswertung von
Delphi-Quellcode:
TypeInfo(Single)
im Konstruktor des Attributs etwas anderes als später zur Laufzeit wenn das geprüft werden soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 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