| Autor |
Beitrag |
exec
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 22.12.11 00:05
Hallo zusammen.
Ich habe vor kurzem angefangen mich in Delphi einzuarbeiten, und muss mich fragen, ob ich bei der Verwendung von Enums irgendetwas falsch mache... Wenn ich zB folgenden Code habe, sagt der Compiler mir dass das nicht geht, weil foo und bar schon definiert sind.
Delphi-Quelltext 1: 2: 3:
| type TTest1 = (FOO, BAR); TTest2 = (FOO, BAR); |
Dies ergibt für mich keinen Sinn, es sei denn die Enums haben keinen eigenen Namensraum.
Das nächste wäre dann dies:
Delphi-Quelltext 1: 2: 3:
| type TTest1 = (FOO, BAR); TTest2 = (FOO_, BAR_); |
Meine IDE gibt mir bei der Autovervollständigung nun bei TTest1 nicht nur die eigenen Werte vor, sondern listet auch die Werte aller folgenden Enums auf. Packe ich den zweiten in einen eigenen type-Bereich funktioniert die Autovervollständigung normal.
Daher wundere ich mich, ob ich irgendetwas falsch mache, ob das ein Bug ist, oder ob Delphi was dies angeht einfach ein bisschen seltsam ist (in meinen Augen). Ich konnte bisher leider keine Antwort hierauf finden.
Ich benutze Embarcadero RAD Studio 2010.
Gruß,
exec
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 22.12.11 00:10
Hallo und  im Forum!
Doch, das ist schon richtig so. Anders als bei z.B. Prism müssen auch die Werte der Enumeration eindeutig sein. Delphi-Quelltext 1: 2: 3:
| type TConnectionKindCategories = (ckcFast, ckcSlow, ckcUnknown); TCarSpeeds = (csFast, csSlow, csUnknown); | Das ist eine Möglichkeit damit umzugehen, so wird es auch intern in Delphi gemacht. Zum Beispiel bei TBrushStyle --> bsClear, ... oder TFontStyle --> fsBold, ...
|
|
exec 
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 22.12.11 00:20
jaenicke hat folgendes geschrieben : | Hallo und im Forum! |
Danke^^
Und auch danke für die schnelle Antwort. Gut, dann muss ich das so akzeptieren.
|
|
Teekeks
      
Beiträge: 211
Erhaltene Danke: 23
|
Verfasst: Do 22.12.11 11:36
hat aber den Vorteil dass du dann nicht avar:=MyRealyLongEnum.Cool; schreiben musst, sondern nur avar:=rleCool;
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 22.12.11 12:37
Und immerhin meckert der Compiler, bei der Zuweisung.
Ich hatte letztens auch gerade den Fall, dass in zwei Enums die Werte gleich hießen. Da die Enums in verschiedenen Units waren, scheint das für Delphi kein Problem gewesen zu sein, aber Delphi meckerte dann bei meiner Zuweisung dass TTest1 und TTest2 nicht zusammenpassen.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 22.12.11 17:27
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.02.12 19:36
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mo 13.02.12 06:11
Das ist leider auch das Problem bei einigen systemeigenen Prozeduren wie
Delete, eof ....
Leider ist - wahrscheinlich aus Lesbarkeitsgründen - das bei Prozeduren nicht umgesetzt worden. Wenn ich schon eine System.delete prozedur habe, wäre eine TTable.delete möglicherweise dann eine TTable.ttdelete gewesen oder ähnlich, dann hätte es keine Verwechslung gegeben und man müsste nicht System.delete schreiben.
Aber es ist ja nur ein kleines Problem. Zum Glück.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.02.12 07:04
|
|
|