Entwickler-Ecke

C# - Die Sprache - Enums mit Konstruktor


markusk - So 11.10.20 16:36
Titel: Enums mit Konstruktor
Hallo,

habe bisher hauptsächlich in Java programmiert und will mich nun in C# einarbeiten.

Ich habe in Java bei Enums oft Konstrukte wie folgendes verwendet:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
public enum Month {
    JAN(1, "January"),
    FEB(2, "February");

    private final int id;
    private final String name;
    
    public int getId() {
       return id;
    }

    public String getName() {
       return name;
    } 

    private Month(int id, String name) {
       this.id=id;
       this.name=name;
    }
}


Geht das in C# auch irgendwie? Ausprobiert hab ich's syntaktisch auf mehrere Arten, aber anscheinend muß man das in C# irgendwie anders schreiben oder es geht schlicht und einfach nicht.

lg, Markus


Ralf Jansen - So 11.10.20 17:50

Nö so funktioniert enum in .Net nicht. Um irgendwas an einem Enum zu ergänzen würde man Extensionmethods schreiben.

Wobei bezogen auf dein Beispiel den Wert(id) hat man eh und irgendeinen Namen abweichen von der Bezeichnung des Wertes würde man wohl über ein DescriptionAttribute am Enum Wert lösen und eine Extensionmethod um darauf bequem zuzugreifen.


Palladin007 - So 11.10.20 22:13

In C# ist ein Enum nur eine Zahl, standardmäßig ein Int32.
Das Enum definiert also nur eine Sammlung von Namen für definierte Werte.

Wenn Du sowas brauchst, kannst Du auf normale Klassen zurückgreifen und statische Properties mit passenden instanzen anbieten.

Aber ganz ehrlich: Was soll das bringen? Mir fällt kein Beispiel ein, das man nicht besser lösen kann.

Und dein Beispiel:
Dafür gibt's in .NET das DateTime-Struct, damit kannst Du so gut wie alles machen und musst dir keine Gedanken um korrekt übersetzte Texte machen.