AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Was ist eigentlich der Unterschied zwischen "type" und "type of"?

Was ist eigentlich der Unterschied zwischen "type" und "type of"?

Ein Thema von Codehunter · begonnen am 12. Sep 2018 · letzter Beitrag vom 12. Sep 2018
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
1.689 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Was ist eigentlich der Unterschied zwischen "type" und "type of"?

  Alt 12. Sep 2018, 08:03
Delphi-Version: 10.2 Tokyo
Moin!
Delphi-Quellcode:
type
  TMyTyp1 = type Cardinal;
  TMyTyp2 = type of Cardinal;
GrüßeCody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.741 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 12. Sep 2018, 08:10
Hilft Dir dieser Thread weiter? https://stackoverflow.com/questions/...can-it-be-used
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
1.689 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

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

  Alt 12. Sep 2018, 09:02
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 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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.604 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

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

  Alt 12. Sep 2018, 10:31
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 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 type generell:
Delphi-Quellcode:
type
  // Alias
  TA = Integer;
  // Distinkter Typ
  TB = type Integer;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
619 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

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

  Alt 12. Sep 2018, 11:29
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.
Fritz Westermann
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
636 Beiträge
 
#6

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

  Alt 12. Sep 2018, 11:33
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
619 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

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

  Alt 12. Sep 2018, 11:41
Claro dann noch passende Helper und wieder ein bisschen mehr Sicherheit........
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
1.689 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

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

  Alt 12. Sep 2018, 12:38
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.490 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

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

  Alt 12. Sep 2018, 13:39
type of ist einfach nur ein Bug und ich möchte jedem davon abraten, das zu nutzen.

Ein Typ, der mit 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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (12. Sep 2018 um 13:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
1.689 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

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

  Alt 12. Sep 2018, 14:48
Also auch noch eine verbuggte Altlast Dann war ich ja richtig das ich immer type ohne of verwendet habe.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:55 Uhr.
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