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 :
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 Cats:IDoSomething { #region IDoSomething Membres public string DoSomething() { return "The cats move"; } #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
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'é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 { interface IDoSomething { string DoSomething(); } }
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 using System; using System.Collections.Generic; using System.Text; namespace Neldim.CatsAndDogs { public enum TypeDeBestiole { Chien, Chat } }
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 :
Jusque là rien d'extraordinaire, j'ai créé une méthode "générique" de fait exit les classes Dogs et 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
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(); } } }
Hors pour un projet plus conséquent, vraiment plus heureusementj'ajoute deux énumérations :
enumCats :
enumChien
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 } }
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);
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à 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![]()
Partager