AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Enums vereinen

Ein Thema von Highttower · begonnen am 26. Mär 2010 · letzter Beitrag vom 31. Mär 2010
Antwort Antwort
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#1

Enums vereinen

  Alt 26. Mär 2010, 10:58
Hallo zusammen,

ich suche eine Möglichkeit ein Enum, um Datentypen zu erweitern. Also quasi davon abzuleiten und dann etwas hinzu fügen.

Um das Ganze zu verdeutlichen hier ein kleines Beispiel dazu:

Delphi-Quellcode:
    TObst = (Apfel, Birne, Pflaume);

    TGemuese = (Moehre, Lauch, Gurke);

    TGesundeSachen = set of TObst AND TGemuese;

implementation

procedure TForm6.FormCreate(Sender: TObject);
var aSchale : TGesundeSachen;
    tmp : String;
begin
    aSchale := [Moehre, Apfel];
    tmp := '';
    case aSchale of
        Apfel:
            tmp := tmp + 'Apfel, ';
        Birne:
            tmp := tmp + 'Birne, ';
        Pflaume :
            tmp := tmp + 'Pflaume, ';
        Moehre:
            tmp := tmp + 'Moehre, ';
        Lauch:
            tmp := tmp + 'Lauch, ';
        Gurke:
            tmp := tmp + 'Gurke, ';
    end;
    ShowMessage('Der Obstsalat enthält ' + tmp);
end;
Wie ihr seht versuche ich Obst und Gemüse auf diese Art zusammen bekommen? Das funktioniert aber nicht werder mit OR, noch mit AND, noch mit einem Komma. Geht sowas in Delphi(2007) überhaupt?

Vielen Dank,

Tobi
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Enums vereinen

  Alt 26. Mär 2010, 11:08
Nein so etwas geht nicht. Aber du kannst es umgekehrt machen:
Delphi-Quellcode:
TGesundeSachen = (Apfel, Birne, Pflaume, Moehre, Lauch, Gurke);

TObst = Apfel..Pflaume;
TGemuese = Moehre..Gurke;
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: Enums vereinen

  Alt 26. Mär 2010, 13:16
in c++ geht das mit dem and oder?
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Enums vereinen

  Alt 26. Mär 2010, 13:49
Wäre aber sehr merkwürdig. Da Apfel und Möhre die selben Ordinalwerte haben kann das eigentlich nicht gehen
Glückauf
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.008 Beiträge
 
Delphi 12 Athens
 
#5

Re: Enums vereinen

  Alt 26. Mär 2010, 13:58
Zitat von vsilverlord:
in c++ geht das mit dem and oder?
"Geht" im Sinne von "compiliert" wohl, kommt aber das Falsche raus!
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Enums vereinen

  Alt 26. Mär 2010, 13:58
Zitat von guinnes:
Wäre aber sehr merkwürdig. Da Apfel und Möhre die selben Ordinalwerte haben kann das eigentlich nicht gehen
Gehen schon (in C++), aber nicht gut geben.
C++ hat halt keine vernünftige Implementierung eines Enum-Typs.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#7

Re: Enums vereinen

  Alt 26. Mär 2010, 14:20
Zitat von guinnes:
Wäre aber sehr merkwürdig. Da Apfel und Möhre die selben Ordinalwerte haben kann das eigentlich nicht gehen
Dank der Class-Operatoren und Funktionen in Records könnte man in neueren Delphis zwar einen Mischtyp erstellen, welcher dennoch keine Überschneidung enthält und zu Teilen mit den Enums kompatibel wäre.

Immerhin könnte man dort intern die Wertebereiche entsprechend verschieben und alles in einem Enum/Integer verwalten.

Aber ganz ehrlich, ich sehe keinen Grund für diesen Aufwand.

Die korrekte Lösung wurde ja schon genannt - siehe #2

PS: ende letzes Jahr gab es doch schonmal genau diese Frage (ich finde nur gerade den Thread nicht) und ich glaub da ging es auch um Obst und Gemüse.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Enums vereinen

  Alt 31. Mär 2010, 07:22
Hallo zusammen,

vielen Dank für die Antworten, ich habe eine Funktion die eine Vergleichsmenge heraus gibt, diese steht mit samt enum in einem für mich unzugänglichen Unit(ich darf nur lesen). Ich habe die Klasse abgeleitet und wollte jetzt, die Methdoik um weiter Vergleichstypen erweitern. Da ich aber auf die Vergleichsmenge keinen Zugriff habe, und selbst wenn ich wollte das designtechnisch Blödsinn wäre, wollte ich diese Menge erweitern. Es geht mir nicht um Obst oder Gemüse von mir aus können das auch verschiedene Waschmittel sein, ich habe nur ein Trivalbeispiel gesucht was nicht so komplex ist.
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Enums vereinen

  Alt 31. Mär 2010, 07:34
Hallo HighTower,

du könntest vielleicht die beiden Methoden isGemüse und isObst in der Klasse implementieren, die auf die enums zugreift. Und isGesund wäre dann isGemüse oder isObst. Du kannst dir auch eine Implementierung auf Basis von Mengen (Sets) überlegen.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#10

Re: Enums vereinen

  Alt 31. Mär 2010, 08:55
Ich würde mal grundsätzlich darüber nachdenken die gesunden Sachen in Klassen zu verpacken. Ziel muss es sein, dein Angebot an gesunden Sachen erweitern zu können OHNE den Quellcode anfassen zu müssen. Also eine "gesunde" Klasse erstellen und die Instanzen davon (Gurke, Apfel, usw.) z.B. in einer Collection verwalten.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:50 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