www.mikrocontroller.net

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


Autor: Marco K. (mbc)
Datum:

Bewertung
0 lesenswert
nicht 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:
 Wohnraum.Wohnzimmer 
oder
 Wohnraum.Küche 
setzen können und in einer anderen Klasse gerne z.B. mit:
 if(Wohnraum == Wohnraum.Wohnzimmer) {tu was}; 
oder
 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

Autor: Julian W. (julian-w) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso, Enums sind doch genau dafür gemacht.

Autor: Marco K. (mbc)
Datum:

Bewertung
0 lesenswert
nicht 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):
using System;
public class Draw
{
    public enum LineStyle
    {
        Solid,
        Dotted,
        DotDash,
    }

    public void DrawLine(int x1, int y1, int x2, int y2, LineStyle lineStyle)
    {
        switch (lineStyle)
        {
            case LineStyle.Solid:
                // durchgehende Linie zeichnen
                break;

            case LineStyle.Dotted:
                // gepunktete Linie zeichnen
                break;

            case LineStyle.DotDash:
                // Linie aus Punkten und Strichen zeichnen
                break;

            default:
                throw(new ArgumentException("Invalid line style"));
        }
    }
}

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

Autor: Julian W. (julian-w) Benutzerseite
Datum:

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

Autor: Marco K. (mbc)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marco K. (mbc)
Datum:

Bewertung
0 lesenswert
nicht 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:
int test = (int)Wohnraum.Küche;

In "Klasse2" werte ich diesen zurückgegebenen integerer entsprechend des 
enums wieder in den "Namen" um:
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

Autor: Julian W. (julian-w) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso, Enumerationen können doch auch Rückgabewerte einer Funktion sein:
public Wohnraum GetWohnraum()
{
  return Wohnraum.Küche;
}

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco K. (mbc)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.