| Autor |
Nachricht |
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.
Dies ergibt für mich keinen Sinn, es sei denn die Enums haben keinen eigenen Namensraum.
Das nächste wäre dann dies:
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
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
jaenicke
      
Beiträge: 15840
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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. 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: 204
Erhaltene Danke: 22
OpenSUSE 11.4
Lazarus 0.9.31
|
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: 452
Erhaltene Danke: 10
Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, 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: 15840
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Do 22.12.11 17:27
baka0815 hat folgendes geschrieben : | | Da die Enums in verschiedenen Units waren, scheint das für Delphi kein Problem gewesen zu sein |
Ist es dann auch nicht. Auch Variablen und gleichnamige Klassen kannst du ja in unterschiedlichen Units problemlos deklarieren, da diese im Namespace der Unit existieren. (Sollte man nicht, klar, passiert aber bei fremden Komponenten.) Du kannst zur Klarstellung dann immer den Unitnamen davorsetzen. Das gilt auch für Werte in Enumerationen.
|
| |
|
|
jaenicke
      
Beiträge: 15840
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: So 12.02.12 19:36
Ich habe übrigens gerade den Compilerschalter gefunden, der das von dir gewünschte Verhalten herstellt: Dann kannst du deine Deklaration benutzen und musst immer schreiben:
|
| |
|
|
Tranx
       
Beiträge: 308
Erhaltene Danke: 22
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: 15840
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Mo 13.02.12 07:04
Tranx hat folgendes geschrieben : | | Leider ist - wahrscheinlich aus Lesbarkeitsgründen - das bei Prozeduren nicht umgesetzt worden. |
Es wurde z.B. bei den neuen Firemonkey-Units umgesetzt. Bei den alten konnte man es aus Kompatibilitätsgründen nicht machen. Und natürlich bleibt das Präfix dabei. Man muss nur zusätzlich den Typ davorschreiben. Beispiel: Ohne Präfix wäre es ja auch absolut unübersichtlich, eben z.B. auf Grund der von dir genannten Verwechslungsgefahr bei Klassenmethoden, die ja ebenfalls den Typ davor stehen haben.
|
| |
|
|
|