IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment fixer ce problème svp ? (POO basique..)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Dev
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Comment fixer ce problème svp ? (POO basique..)
    Bonjour,

    Voici ce que je veux faire, 2 listes d'objets (une pour les armes, une pour les armures) mais je veux répertorier tout ça dans une seule liste pour gérer un inventaire par la suite.

    L'erreur est volontairement commise car je ne sais pas comment faire

    Voici le code en question

    https://dotnetfiddle.net/q0EEYn

    Cordialement,

    G.

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonjour,

    je ne connais pas ton niveau donc excuse moi si je parle de choses que tu connais déjà :

    Tu utilises déjà l'héritage donc utilise le pour faire ce que tu veux, c'est à dire du polymorphisme. C'est grossièrement le fait d’appeler une seule et même méthode et de laisser l'héritage faire la différence comme un grand.

    Voici une des façons de faire, obliger les classes découlant de Item a définir une méthode qui décrit l'objet en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public abstract class Item
    {
        public string type;
     
        public Item(string type)
        {
            this.type = type;
        }
     
        public abstract string Description();
    }
     
    public class Arme : Item
    {
        int attaque;
     
        public Arme(int attaque) : base("Arme")
        {
            this.attaque = attaque;
        }
     
        public override string Description()
        {
            return attaque.ToString();
        }
     
        public int Attaque
        {
            get { return attaque; }
        }
    }
     
    public class Armure : Item
    {
        int defense;
     
        public Armure(int defense) : base("Armure")
        {
            this.defense = defense;
        }
     
        public override string Description()
        {
            return defense.ToString();
        }
     
        public int Defense
        {
            get { return defense; }
        }
    }
    • J'ai passé Item en abstract, pour un meilleur héritage. En effet tu n'as pas envie de créer un objet de type Item qui ne représentera rien de concret. Et cela te permet d'y ajouter une méthode Description() qui sera redéfini par les classes filles.
    • Même une classe abstraite peut avoir un constructeur, mais ça ne sert qu'a alléger les arguments. Tu peux l’appeler a l'aide du mot-clé base. Comme ça, la classe mère sait exactement ce qu'il faut faire et ça t'évite d'écrire du code.
    • J'ai fait quelques changements, c'était juste pour y voir plus claire, à toi de garder ce que tu as besoin.


    Il est courant qu'avec un exemple assez simple comme celui là, ça ne parait pas très utile mais crois-moi dès que tu commences a avoir beaucoup de code, ça aide.

    Du coup, le code devient beaucoup plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            foreach (Item i in inventaire)
            {
                Console.WriteLine(i.Description());
            }

  3. #3
    Membre régulier
    Homme Profil pro
    Dev
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut
    Un grand merci a toi PixelJuice pour ces explications claires et precises, je vais pouvoir l'appliquer a mon projet Unity.

    Bonne fin de journee,

    Cordialement

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    Salut,
    le c# est assez puissant et vu que les armes et armures héritent de inventaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            foreach (Item i in inventaire)
            {
                if (i is Arme)
                {
                    (Arme)i.FaisUnTruc();
                }
                if (i is Armure)
                {
                    (Armure)i.FaisUnAutreTruc();
                }
            }
    Si la solution de PixelJuice ou la mienne te convient, n'oublie pas de cliquer sur 'résolu'

  5. #5
    Membre régulier
    Homme Profil pro
    Dev
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut
    Merci egalement de ta réponse,

    PixelJuice avait résolu mon soucis, entre temps j'ai bouquiné la programmation orienté objet et maintenant je ne rencontre plus ce genre de problèmes. Je suis opérationnel a ce niveau.

    Par contre je ne vois pas ou est le bouton résolu sur mobile ? Le modo peut le faire pour moi svp.

    Bonne journée a tous.

Discussions similaires

  1. [Conseils] Comment retrouver un problème
    Par Shoryu dans le forum Sondages et Débats
    Réponses: 67
    Dernier message: 03/11/2006, 13h26
  2. Réponses: 2
    Dernier message: 16/08/2005, 09h43
  3. Réponses: 16
    Dernier message: 24/06/2005, 12h49
  4. Comment fixer une date dans un champ !
    Par LATHIOS dans le forum Access
    Réponses: 8
    Dernier message: 17/06/2005, 19h44
  5. [MFC]comment fixer attributs de fichiers
    Par lucky dans le forum MFC
    Réponses: 4
    Dernier message: 21/04/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo