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