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

Dotnet Discussion :

[C#] Je suis un peu coincé avec des énums


Sujet :

Dotnet

  1. #1
    Membre averti
    Avatar de dtavan
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Points : 381
    Points
    381
    Par défaut [C#] Je suis un peu coincé avec des énums
    Je colle sur un truc, je l'avais déjà fait pour un client mais il y a longtemps et manque de bol j'ai un client qui me le redemande , je vais vous l'exposer avec un exemple tout con (désolé du langage) :
    J'ai deux classes : Cats et Dogs, une interface IDoSomething et une classe maitresse :
    Cats :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        class Cats:IDoSomething
        {
            #region IDoSomething Membres
            public string DoSomething()
            {
                return "The cats move";
            }
            #endregion
        }
    }
    Dogs :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        class Dogs:IDoSomething
        {
            #region IDoSomething Membres
            public string DoSomething()
            {
                return "The dogs moves";
            }
            #endregion
        }
    }
    l'interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        interface IDoSomething
        {
            string DoSomething();
        }
    }
    l'énum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        public enum TypeDeBestiole
        { 
            Chien,
            Chat
        }
    }
    et enfin la classe principale :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        public class mainClass
        {
            private string _result = String.Empty;
            private IDoSomething _laBete = null;
            public string BougeDeLa(TypeDeBestiole bebete)
            {
                switch (bebete)
                {
                    case TypeDeBestiole.Chien:
                        _laBete = new Dogs();
                        break;
                    case TypeDeBestiole.Chat:
                        _laBete = new Cats();
                        break;
                    default:
                        break;
                }
                return _result = _laBete.DoSomething();    
            }
        }
    }

    j'utilise une application console pour tester ma classe :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Neldim.CatsAndDogs;
    namespace ConsummeBeast
    {
        class Program
        {
            static void Main(string[] args)
            {
                mainClass cd = new mainClass();
                string _str=cd.BougeDeLa(TypeDeBestiole.Chien);
                Console.WriteLine(_str);
                Console.ReadLine();
            }
        }
    }
    Jusque là rien d'extraordinaire, j'ai créé une méthode "générique" de fait exit les classes Dogs et Cats.
    Hors pour un projet plus conséquent, vraiment plus heureusement j'ajoute deux énumérations :

    enumCats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        public enum theCats
        { 
            miaule,
            boisLolo,
            faisLeMur
        }
    }
    enumChien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Neldim.CatsAndDogs
    {
        public enum theChien
        { 
            aboie,
            mangeOs
        }
    }
    et là les problèmes commencent, en effet je voudrai créer une méthode "générique" du style cd.BougeDeLa(TypeDeBestiole.Chien,TypeComportement.Miaule);
    et là je suis coincé, si encore les deux énum avaient les mêmes valeurs ca irait mais là non ...
    Avez vous une idée ?
    Merci


    J'ai la solution au bout de la langue mais j'arrive pas concrétiser

    PS : le truc marrant enfin presque, est que j'ai deux contraintes :
    1- L'énumération passée en second paramètre dépend de l'énumération passée en premier paramètre
    2- L'utilisateur veut pouvoir accéder à cette méthode avec un maximum de deux lignes de codes : création instance de la classe puis appel de la méthode.

    Ils sont difficiles les clients en ce moment

  2. #2
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Quelque chose comme ça ?
    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
    interface IDoSomething
    {
    	string DoSomething();
    }
     
    class Cats : IDoSomething
    {
    	public string DoSomething() {
    		return "meow";
    	}
    }
    class Dogs : IDoSomething
    {
    	public string DoSomething() {
    		return "woof";
    	}
    }
    class mainClass<T> where T : IDoSomething, new()
    {
    	private string _result = string.Empty;
    	private IDoSomething _laBete = null;
    	public string BougeDeLa() {
    		_laBete = new T();
    		return _result = _laBete.DoSomething();
    	}
    }
    Et on l'appelle comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mainClass<Cats> mc = new mainClass();
    string s = mc.BougeDeLa();
    Ca irait ?

  3. #3
    Membre averti
    Avatar de dtavan
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Points : 381
    Points
    381
    Par défaut
    Merci,

    J'avais pensé à ca mais le problème vient de l'appel, le client veut un appel via des enums :

    maClasse.BougeDeLa(TypeDeBestiole.Chien,TypeComportement.Aboie); avec comme je l'ai dit la deuxième énums dépend de la première, de sorte que l'on ne puisse écrire : maClasse.BougeDeLa(TypeDeBestiole.Chien,TypeComportement.Miaule); ou maClasse.BougeDeLa(TypeDeBestiole.Chat,TypeComportement.MangeOs);

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    Les enum ne sont qu'une forme de int.

    Tu peux donc les caster en int, passer ça a ta fonction et repasser ensuite en enum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    enum 
    {
            miaule = 0,
            boisLolo,
            faisLeMur
    }
     
    cd.BougeDeLa(TypeDeBestiole.Chien,0)
    en fonction de la classe qui implémente BougeDeLa tu switch sur le bon enum

  5. #5
    Membre averti
    Avatar de dtavan
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Points : 381
    Points
    381
    Par défaut
    Merci beaucoup, je vais faire ca dire que je dois présenter mon projet demain, ce dimanche va être charger

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/07/2009, 18h55
  2. Réponses: 8
    Dernier message: 22/06/2009, 18h06
  3. Mon jeu, venez m'aider, je suis un peu coincé!
    Par Megascript dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/06/2007, 18h44
  4. [VBA-A]Amusons nous un peu avec des mots.
    Par Miss Ti dans le forum Access
    Réponses: 6
    Dernier message: 24/07/2006, 21h13
  5. Menu un peu particulier avec des onmouseover
    Par Jinroh77 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/02/2006, 14h30

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