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 Was ist eigentlich der Unterschied zwischen "type" und "type of"? (https://www.delphipraxis.net/197857-ist-eigentlich-der-unterschied-zwischen-type-und-type.html)

Codehunter 12. Sep 2018 08:03

Delphi-Version: 10.2 Tokyo

Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Moin!
Delphi-Quellcode:
type
  TMyTyp1 = type Cardinal;
  TMyTyp2 = type of Cardinal;
GrüßeCody

DeddyH 12. Sep 2018 08:10

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Hilft Dir dieser Thread weiter? https://stackoverflow.com/questions/...can-it-be-used

Codehunter 12. Sep 2018 09:02

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Zitat:

Zitat von DeddyH (Beitrag 1412989)

Hmm eher noch ratloser. Demnach wäre type of eine Altlast aus .Net-Zeiten? Und was ist dann ein type ohne of?

Zur Erklärung: Ich verwende gerne mal benannte Typen, um den Verwendungszweck eines Elements genauer zu definieren:
Delphi-Quellcode:
type
  TMinuten = type Cardinal;
  TSekunden = type Cardinal;

  TMyRec = record
    {...}
    MaxLaufzeit: TMinuten;
  end;
MaxLaufzeit könnte genausogut Sekunden sein, wäre immer noch ein Cardinal. Dann aber eben mit TSekunden angegeben.

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:
var Variable: string
gearbeitet hatten sondern mit zentral definierten eigenen Typen.

Nun habe ich aber auch immer wieder die Schreibweise mit type of gesehen, die ich bisher nie verwendet habe. Deshalb die Frage.

Zacherl 12. Sep 2018 10:31

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Zitat:

Zitat von Codehunter (Beitrag 1412994)
Zitat:

Zitat von DeddyH (Beitrag 1412989)

Hmm eher noch ratloser. Demnach wäre type of eine Altlast aus .Net-Zeiten? Und was ist dann ein type ohne of?

Naja Altlast eher nicht. Die Syntax wurde wohl damals für Delphi.NET um das
Delphi-Quellcode:
type of
erweitert und dann ausversehen auch für normalen Delphi Code aktiviert. Laut dem StackOverflow Thread handelt es sich hierbei um einen Bug. Zum
Delphi-Quellcode:
type
generell:
Delphi-Quellcode:
type
  // Alias
  TA = Integer;
  // Distinkter Typ
  TB = type Integer;

Fritzew 12. Sep 2018 11:29

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.

Hobbycoder 12. Sep 2018 11:33

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Zitat:

Zitat von Fritzew (Beitrag 1413010)
Mit type of bekommst Du einen neuen Typ der nicht zum Original Kompatibel ist...

Ich gehe mal davon aus, ohne es wirklich probiert zu haben, dass man mit den Typen dann aber ohne Cast rechnen kann (sonst würde Codehunter das nicht so nutzen).
Insofern kann man das durchaus zu seinem Vorteil nutzen. Zum Beispiel in Methodenparametern, um schon beim Aufruf eine klar definierte Einheit zu signalisieren.

Fritzew 12. Sep 2018 11:41

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Claro dann noch passende Helper und wieder ein bisschen mehr Sicherheit........

Codehunter 12. Sep 2018 12:38

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Zitat:

Zitat von Fritzew (Beitrag 1413012)
Claro dann noch passende Helper und wieder ein bisschen mehr Sicherheit........

Bingo! Genau da wollte ich gedanklich auch hin. So kollidiert man auch nicht mit evtl. existierenden Helpern der Ursprungstypen. Allgemein bin ich immer für etwas mehr Striktheit im Code. Das beugt Flüchtigkeitsfehlern vor und macht den Code später besser lesbar.

Stevie 12. Sep 2018 13:39

AW: Was ist eigentlich der Unterschied zwischen "type" und "type of"?
 
Delphi-Quellcode:
type of
ist einfach nur ein Bug und ich möchte jedem davon abraten, das zu nutzen.

Ein Typ, der mit
Delphi-Quellcode:
type of
deklariert ist, wird vom Compiler als TypeKind tkClassRef behandelt.

Delphi-Quellcode:
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.
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).
Dass man trotzdem Ordinalvariablen zuweisen kann, liegt daran, dass es nunmal bugged ist.

Codehunter 12. Sep 2018 14:48

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 06:08 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf