Forum: PC-Programmierung C# - Eine Art "Flag" setzen


von Marco K. (mbc)


Lesenswert?

Leider kann ich als Noob nicht genau sagen was ich meine, deshalb ein 
Beispiel:

Ich brauche ein "Objekt" welches immer nur einen aus mehreren 
vorgegebenen Werten beinhalten sollte. Diese "Objekte" möchte ich über 
mehrere Klassen hinweg komfortabel nutzen können.

Also als Beispiel:

Ich habe zwei "Dinge":
a) Wohnzimmer
b) Küche

Ich brauche nun ein "Hauptding" dafür:
- Wohnraum

Nun das Problem:

Ich würde das "Ding" "Wohnraum" gerne mit:
1
 Wohnraum.Wohnzimmer
oder
1
 Wohnraum.Küche
setzen können und in einer anderen Klasse gerne z.B. mit:
1
 if(Wohnraum == Wohnraum.Wohnzimmer) {tu was};
oder
1
 if(Wohnraum == Wohnraum.Küche) {tu was};
als Bool auslesen können

Es geht sich mir darum, das ich eine art "Liste brauche" aus deren ich 
auf Werte zugreifen kann.
Quasi also eine Art "Flag".
Da ich später mal viele "Räume" haben werde, kann ich das nicht einfach 
als String machen, deshalb benötigte ich dafür so eine art vorgegebene 
Auswahlliste.

Ich hab mich mal in Enums eingelesen, weis aber nicht so recht ob das so 
funktioniert oder sinnvoll ist (vor allem, wenn man an andere Klassen 
und Funktionen übergibt).

Ich hoffe ihr versteht in etwa was ich vom Prinzip her meine ... kann 
mich leider nicht deutlicher ausdrücken.

MFG
Marco

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Wieso, Enums sind doch genau dafür gemacht.

von Marco K. (mbc)


Lesenswert?

>>Wieso, Enums sind doch genau dafür gemacht.

Wenn ich das mal wüßte ;-)) ... laut meinem Verständnis sind enums zum 
"zählen" da, das hat für mich als Laien erstmal nichts mit meinem 
Problem zu tun ...

Dann wird das vermutlich auch über mehrere Klassen hinweg so komfortabel 
laufen (kanns leider im Moment nicht ausprobieren sondern nur 
Informationen suchen):
1
using System;
2
public class Draw
3
{
4
    public enum LineStyle
5
    {
6
        Solid,
7
        Dotted,
8
        DotDash,
9
    }
10
11
    public void DrawLine(int x1, int y1, int x2, int y2, LineStyle lineStyle)
12
    {
13
        switch (lineStyle)
14
        {
15
            case LineStyle.Solid:
16
                // durchgehende Linie zeichnen
17
                break;
18
19
            case LineStyle.Dotted:
20
                // gepunktete Linie zeichnen
21
                break;
22
23
            case LineStyle.DotDash:
24
                // Linie aus Punkten und Strichen zeichnen
25
                break;
26
27
            default:
28
                throw(new ArgumentException("Invalid line style"));
29
        }
30
    }
31
}

Mein Problem ist nur:

Ich analysiere etwas und setze dann das Enum und möchte es als 
Rückgabewert einer Funktion in eine andere Klasse übergeben, die 
Deklaration des enum ist aber in dieser Klasse nicht vorhanden ...

Muß ich neben meinem "Wohnraum" auch noch das Enum mit übergeben (man 
kann ja nur ein objekt als Rückgabewert benutzen).

MFG
Marco

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Wieso, dann setzt das Enum doch einfach auf Public. Dann sollte es doch 
überall verfügbar sein.

von Marco K. (mbc)


Lesenswert?

Stimmt, dann wäre das Problem gelöst, aber wie krieg ich das enum aus 
meiner Funktion als Rückgabewert in meine andere Klasse ?

Soweit ich weis kann man z.B. int oder string als Rückgabewert einer 
Funktion benutzen, aber über ein enum als Rückgabewert kann ich nichts 
finden.

MFG
Marco

von Marco K. (mbc)


Lesenswert?

So, ich habe es jetzt mal (mit meinen äußerst bescheidenen Kenntnissen) 
so gelöst:

In "Klasse1" gebe ich als Rückgabewert der Funktion einen integer 
entsprechend des enums:
1
int test = (int)Wohnraum.Küche;

In "Klasse2" werte ich diesen zurückgegebenen integerer entsprechend des 
enums wieder in den "Namen" um:
1
this.toolStripLabel.Text = Enum.ToObject(typeof(Klasse1.Wohnraum),test).ToString();

Das funktioniert soweit. Meine Frage wäre jedoch:

Kann man da noch etwas anders machen bzw. verbessern?
Kann man sich noch Schreibarbeit sparen indem man weiter optimiert?

MFG
Marco

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Wieso, Enumerationen können doch auch Rückgabewerte einer Funktion sein:
1
public Wohnraum GetWohnraum()
2
{
3
  return Wohnraum.Küche;
4
}

von Johnny (Gast)


Lesenswert?

Marco, Du denkst viel zu weit, man kann in C# alle objekte übergeben, 
also auch ein Emun und alles andere. C# ist sehr ausgereift, darum 
sollte man sich beim Entwickeln am besten von bekannten Einschränkungen 
von anderen Programmiersprachen lösen und davon ausgehen, dass es 
möglich ist. Meist muss man dann nur noch herausfinden, wie genau man es 
umsetzen muss.

von Marco K. (mbc)


Lesenswert?

@Julian W. :

Vielen Dank, das funktioniert absolut wie gewünscht! Danke!!

@Johnny :
"Zum Glück" kenne ich keine anderen Sprachen, C# ist meine erste, aber 
ich habs leider nicht 3,5 Jahre wie viele andere gelernt.

Ich beiß mich da Stück für Stück durch und da gibt es nunmal eine ganze 
Menge Hürden.

Ich gehe da nach "Lerning by Doing". Ich stecke die Ziele relativ hoch, 
versuche mich dann so gut es geht zu informieren und wenn ich nicht 
weiterkommen sollte frage ich  nach. Das ist meiner Meinung nach die 
beste Möglichkeit und hat am meisten Lerneffekt.

MFG
Marco

von Johnny (Gast)


Lesenswert?

> Ich gehe da nach "Lerning by Doing". Ich stecke die Ziele relativ hoch,
> versuche mich dann so gut es geht zu informieren und wenn ich nicht
> weiterkommen sollte frage ich  nach. Das ist meiner Meinung nach die
> beste Möglichkeit und hat am meisten Lerneffekt.

Ja genau, das habe ich auch so gemacht. Nach einigem wurschteln hatte 
ich dann noch einen (zwar schlechten) C# Programmierkurs besucht, kann 
ich soweit auch sehr empfehlen um sich schnell weiterzuentwickeln.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.