Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Seite 1 von 2  1 2      

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