Reproduire l'énumération Java en C #

Cet article est l'article du 11ème jour du Calendrier de l'avent StudioZ Tech 2019.

introduction

J'ai commencé à utiliser Unity il y a environ 5 ans et je suis passé de Java à C #. Comme c'est un langage avec de nombreuses similitudes, j'ai pu l'utiliser presque sans gêne, mais le seul problème était les spécifications d'énumération. Je me suis donc demandé si l'énumération Java pouvait être reproduite en C #.

Caractéristiques de l'énumération Java et méthode d'implémentation

--L'énumérateur a une instance du type d'énumération ――Vous pouvez le rencontrer en utilisant la classe normalement

Si vous codez les conditions jusqu'à présent, cela ressemblera à ceci

    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();
        //Impossible de générer une instance de l'extérieur
        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;
        //Impossible de générer une instance de l'extérieur
        private EnumSample2( int num ) {
            Num = num;
            //Si vous voulez vérifier les doublons, faites-le ici
            //Il semble facile de le mettre dans un dictionnaire et de le vérifier avec la clé Contient
        }
    }
    //Interface d'élément de dépôt
    public interface IDropItem {
        string Name { get; }
        int Price { get; }
        string Description { get; }
    }
    
    //Type d'énumération des armes pouvant être traitées comme des objets de largage
    public abstract class Weapon : IDropItem {
        public static Weapon Sword = new WeaponSword();
        private class WeaponSword : Weapon {
            //Même si le constructeur est public, la classe elle-même est privée, il n'est donc pas possible de créer une instance de l'extérieur.
            public WeaponSword() {}
            public override string Name { get { return "épée"; } }
            public override int Price { get { return 100; } }
            public override string Description { get { return "Une belle explication"; } }
            public override void Attack() {
                base.Slash();
            }
        }

        public static Weapon Spear = new WeaponSpear();
        private class WeaponSpear : Weapon {
            public WeaponSpear() {}
            public override string Name { get { return "lance"; } }
            public override int Price { get { return 50; } }
            public override string Description { get { return "Explication comme ça"; } }
            public override void Attack() {
                base.Pierce();
            }
        }

        public static Weapon Club = new WeaponClub();
        private class WeaponClub : Weapon {
            public WeaponClub() {}
            public override string Name { get { return "club"; } }
            public override int Price { get { return 10; } }
            public override string Description { get { return "Explication très étrange"; } }
            // Attack()La mise en œuvre est facultative
        }

        protected Weapon() {}
    
        //Assurez-vous de définir le nom, le prix et la description avec un énumérateur
        public abstract string Name { get; }
        public abstract int Price { get; }
        public abstract string Description { get; }

        //La mise en œuvre du traitement des attaques peut être omise
        public virtual void Attack() {
            //S'il n'est pas remplacé, cliquez par défaut
            Strike();
        }

        //Les propriétés et méthodes déclarées comme protégées sont accessibles du côté de l'énumérateur
        protected void Slash() {
            //Traitement des armes à couper
        }

        protected void Pierce() {
            //Manipulation des armes blanches
        }

        protected void Strike() {
            //Manipulation des armes à battre
        }

    }

Ce que vous ne pouvez pas faire avec C

--Utiliser l'énumérateur comme condition de commutation

en conclusion

Cela peut sembler gênant à première vue, mais l'utilisation d'énumérations de style Java facilite la réalisation du polymorphisme. Si vous avez une chance, essayez-la

référence

Les constantes Java sont Enum! Je vais vous dire comment utiliser Enum et comment penser

Recommended Posts

Reproduire l'énumération Java en C #
Modèle de stratégie Enum en Java
[Java] enum (type d'énumération)
Lire le fichier de propriétés Java en C #
Java, JavaScript, C # (différence d'affectation)
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
La direction de Java dans "C ++ Design and Evolution"
FizzBuzz en Java
De Java à C et de C à Java dans Android Studio
Différences dans l'écriture des classes Java, C # et Javascript
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
Exemple d'utilisation de Java Enum
Programmation par contraintes en Java
Mettez java8 dans centos7
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Enum Reverse Map Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
Organiser les builds dans des combinaisons C ++ / Java et Win / Linux
Implémentez rapidement singleton avec enum en Java
Soustraire les constantes Enum des chaînes et des valeurs en Java
Essayez d'utiliser RocksDB avec Java
Lire des fichiers binaires en Java 1
Résolution avec Ruby, Perl et Java AtCoder ABC 113 C Reference
Évitez l'erreur que Yuma a donnée en Java
Obtenir des informations EXIF en Java
[Neta] Sleep Sort en Java
Modifier ini en Java: ini4j