Reproduzieren Sie die Java-Enumeration in C #

Dieser Artikel ist der Artikel zum 11. Tag von StudioZ Tech Adventskalender 2019.

Einführung

Ich habe vor ungefähr 5 Jahren angefangen, Unity zu verwenden und bin von Java zu C # gewechselt. Da es sich um eine Sprache mit vielen Ähnlichkeiten handelt, konnte ich sie fast ohne Unbehagen verwenden, aber das einzige Problem waren die Aufzählungsspezifikationen. Also habe ich mich gefragt, ob Java-Enumeration in C # reproduziert werden kann.

Java-Enum-Eigenschaften und Implementierungsmethode

Wenn Sie die bisherigen Bedingungen codieren, sieht dies folgendermaßen aus

    public class EnumSample {
        public static EnumSample Enum1 = new EnumSample();
        public static EnumSample Enum2 = new EnumSample();
        public static EnumSample Enum3 = new EnumSample();
        public static EnumSample Enum4 = new EnumSample();
        //Es kann keine Instanz von außen generiert werden
        private EnumSample() {}
    }
    public class EnumSample2 {
        public static EnumSample2 Enum1 = new EnumSample2( 1 );
        public static EnumSample2 Enum2 = new EnumSample2( 2 );
        public static EnumSample2 Enum3 = new EnumSample2( 3 );
        public static EnumSample2 Enum4 = new EnumSample2( 4 );
    
        public int Num;
        //Es kann keine Instanz von außen generiert werden
        private EnumSample2( int num ) {
            Num = num;
            //Wenn Sie nach Duplikaten suchen möchten, tun Sie dies hier
            //Es scheint einfach zu sein, es in ein Wörterbuch zu packen und es mit dem Contains Key zu überprüfen
        }
    }

--Methoden können für jede Instanz implementiert werden

    //Elementschnittstelle löschen
    public interface IDropItem {
        string Name { get; }
        int Price { get; }
        string Description { get; }
    }
    
    //Aufzählungstyp von Waffen, die als Drop-Items behandelt werden können
    public abstract class Weapon : IDropItem {
        public static Weapon Sword = new WeaponSword();
        private class WeaponSword : Weapon {
            //Selbst wenn der Konstruktor öffentlich ist, ist die Klasse selbst privat, sodass es nicht möglich ist, eine Instanz von außen zu erstellen.
            public WeaponSword() {}
            public override string Name { get { return "Schwert"; } }
            public override int Price { get { return 100; } }
            public override string Description { get { return "Eine schöne Erklärung"; } }
            public override void Attack() {
                base.Slash();
            }
        }

        public static Weapon Spear = new WeaponSpear();
        private class WeaponSpear : Weapon {
            public WeaponSpear() {}
            public override string Name { get { return "Speer"; } }
            public override int Price { get { return 50; } }
            public override string Description { get { return "Erklärung wie diese"; } }
            public override void Attack() {
                base.Pierce();
            }
        }

        public static Weapon Club = new WeaponClub();
        private class WeaponClub : Weapon {
            public WeaponClub() {}
            public override string Name { get { return "Verein"; } }
            public override int Price { get { return 10; } }
            public override string Description { get { return "Sehr seltsame Erklärung"; } }
            // Attack()Die Implementierung ist optional
        }

        protected Weapon() {}
    
        //Stellen Sie sicher, dass Sie den Namen, den Preis und die Beschreibung mit einem Enumerator definieren
        public abstract string Name { get; }
        public abstract int Price { get; }
        public abstract string Description { get; }

        //Die Implementierung der Angriffsverarbeitung kann weggelassen werden
        public virtual void Attack() {
            //Wenn nicht überschrieben, drücken Sie als Standard
            Strike();
        }

        //Auf Eigenschaften und Methoden, die als geschützt deklariert sind, kann von der Enumeratorseite aus zugegriffen werden
        protected void Slash() {
            //Waffen zum Schneiden verarbeiten
        }

        protected void Pierce() {
            //Umgang mit Stichwaffen
        }

        protected void Strike() {
            //Umgang mit schlagenden Waffen
        }

    }

Was Sie mit C # nicht machen können

--Verwenden Sie den Enumerator als Schalterbedingung

abschließend

Auf den ersten Blick mag es unangenehm erscheinen, aber die Verwendung von Enum im Java-Stil erleichtert das Erreichen von Polymorphismus. Wenn Sie eine Chance haben, probieren Sie es bitte aus

Referenz

Java-Konstanten sind Enum! Ich werde Ihnen sagen, wie man Enum verwendet und wie man denkt

Recommended Posts

Reproduzieren Sie die Java-Enumeration in C #
Enum Strategiemuster in Java
[Java] enum (Aufzählungstyp)
Lesen Sie die Java-Eigenschaftendatei in C #
Java, JavaScript, C # (Unterschied in der Zuordnung)
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
Die Richtung von Java in "C ++ Design and Evolution"
FizzBuzz in Java
Von Java nach C und von C nach Java in Android Studio
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Anwendungsbeispiel für Java Enum
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
Enum Reverse Map Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Fehler in Java ausdrücken
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Organisieren Sie Builds in C ++ / Java- und Win / Linux-Kombinationen
Implementieren Sie Singleton mit Enum schnell in Java
Subtrahieren Sie Enum-Konstanten von Zeichenfolgen und Werten in Java zurück
Versuchen Sie es mit RocksDB mit Java
Lesen Sie Binärdateien in Java 1
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat
Holen Sie sich EXIF-Informationen in Java
[Neta] Sleep Sort in Java
Bearbeiten von ini in Java: ini4j