Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Mehrere Aufzählungstypen mit gleichen Membern (https://www.delphipraxis.net/76800-mehrere-aufzaehlungstypen-mit-gleichen-membern.html)

xaromz 10. Sep 2006 09:40


Mehrere Aufzählungstypen mit gleichen Membern
 
Hallo,

warum ist es nicht möglich, mehrere Aufzählungstypen zu deklarieren, die Member mit glechen Namen besitzen?

Z. B. so:
Delphi-Quellcode:
type
  HorizontalAlignment = (None, Left, Center, Right, Block);
  VerticalAlignment = (None, Top, Center, Bottom);
Sowohl bei None als auch bei Center mackert Delphi. Dabei sollte es doch egal sein, da ich die Member mit dem qualifizierten Namen eindeutig identifizieren könnte :gruebel: .

Gibt es hierfür eine Lösung?

Gruß
xaromz

marabu 10. Sep 2006 10:14

Re: Mehrere Aufzählungstypen mit gleichen Membern
 
Hallo,

ich arbeite nicht mit .NET, aber None und Center - enum values, quasi implizite Konstanten - im selben Namespace (Unit)? Wie sieht da der qualifizierte Name aus?

Grüße vom marabu

xaromz 10. Sep 2006 10:37

Re: Mehrere Aufzählungstypen mit gleichen Membern
 
Hallo,
Zitat:

Zitat von marabu
ich arbeite nicht mit .NET, aber None und Center - enum values, quasi implizite Konstanten - im selben Namespace (Unit)? Wie sieht da der qualifizierte Name aus?

z. B. so:
Delphi-Quellcode:
if HAlign = HorizontalAlignment.Center then
begin
  // Tu was
end;
Wobei mir das Case-Template leider folgenden Code präsentiert:
Delphi-Quellcode:
var
  HAlign: HorizontalAlignment;
begin
  case HAlign of
    Unit1.None: ;
    Unit1.Left: ;
    Unit1.Center: ;
    Unit1.Right: ;
  end;
end;
Beise Varianten funktionieren.
Da frage ich mich, welches ist jetzt der "echte" Name. In .Net wird das eigentlich nicht mit dem Namespace genutzt, sondern mit dem Aufzählungstypen (also HorizontalAlignment.Center).

Gruß
xaromz

Elvis 10. Sep 2006 11:16

Re: Mehrere Aufzählungstypen mit gleichen Membern
 
Zitat:

Zitat von xaromz
Wobei mir das Case-Template leider folgenden Code präsentiert:
Delphi-Quellcode:
var
  HAlign: HorizontalAlignment;
begin
  case HAlign of
    Unit1.None: ;
    Unit1.Left: ;
    Unit1.Center: ;
    Unit1.Right: ;
  end;
end;
Beise Varianten funktionieren.
Da frage ich mich, welches ist jetzt der "echte" Name. In .Net wird das eigentlich nicht mit dem Namespace genutzt, sondern mit dem Aufzählungstypen (also HorizontalAlignment.Center).

Moin, :hi:

Delphi generiert dir für jeden Wert deines Enum ene globale Kontante.
Die wiederum werden in Delphi.Net so umgesetzt, dass du pro Unit eine Klasse hast, in der sie als Konstante (oder statische Felder :gruebel: ) deklariert sind.
Wenn du also zwei Enums in der gleichen Unit definiert, die Überschneidungen in ihren Weten haben, würde ich davon ausgehen, dass er dir mit Anlauf ins Gesicht springt...
Vllt kann man ja mit Delphi.Net 2007 .Net Apps schreiben ohne ständig wieder in die Delphi32-Welt gerissen zu werden. ;)

xaromz 10. Sep 2006 11:21

Re: Mehrere Aufzählungstypen mit gleichen Membern
 
Hallo,

ich hatte gehofft, dass Du hier antwortest.
Zitat:

Zitat von Elvis
Delphi generiert dir für jeden Wert deines Enum ene globale Kontante.
Die wiederum werden in Delphi.Net so umgesetzt, dass du pro Unit eine Klasse hast, in der sie als Konstante (oder statische Felder :gruebel: ) deklariert sind.
Wenn du also zwei Enums in der gleichen Unit definiert, die Überschneidungen in ihren Weten haben, würde ich davon ausgehen, dass er dir mit Anlauf ins Gesicht springt...
Vllt kann man ja mit Delphi.Net 2007 .Net Apps schreiben ohne ständig wieder in die Delphi32-Welt gerissen zu werden. ;)

Ach verdammt...

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.

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