Bonjour,
Quelle est l'avantage de mettre comme type de methode une interface ?
Merci
Bonjour,
Quelle est l'avantage de mettre comme type de methode une interface ?
Merci
Donner une interface plutot qu'une classe. C'est simplement donner la notion de mouvement, d'action comme notion de communication entre deux entites.
Prenons un exemple:
la classe cheval a quatre pattes et sait courir.
l'homme a deux apttes et sait courir.
Tu as besoin pour ta carriole d'un animal qui sait courir, tu vas donc creer l'interface animal avec la fonction courir et les classes homme et cheval rempliront son contrat.
Ainsi, peu importe que ce soit un cheval ou un homme (peu importe les proprietes de la classe) qui tire la carriole elle sait que quelqu un va courir pour la tirer.
Toi tu ainsi pouvoir jouer avec cette interface pour selon le poids de la carriole la faire tirer par un homme ou par un cheval.
Si je mets comme type l'interface, à quel moment je fais lui dire c'est le cheval ou l'homme que je prefere utiliser ? car les 2 class font implementer la method courir de l'interface
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 IAnimal moteur = new Homme(); IAnimal moteur2 = new Cheval(); moteur.Avance(); moteur2.Avance();
"Winter is coming" (ma nouvelle page d'accueil)
Ca revient au meme que
Alors je ne vois pas trop l'interet ? excusez moi mais j'essaye de comprendre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Homme moteur = new Homme(); Cheval moteur2 = new Cheval(); moteur.Avance(); moteur2.Avance();
Avec Carriole .moteur de type IAnimal:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (Carrriole.Lourde) Carrriole.moteur = new Cheval(); else Carrriole.moteur = new Homme(); Carriole.moteur.avancer()
Pour aller plus loin (fabrique) tu fais:
Tu evites ainsi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IAnimal animal = Fabrique.CreateAnimal("Homme"); animal.Avance();
Exemple avec la recurcivité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 string nomanimal = "Homme"; switch (nomanimal.ToUpperInvariant()) { case "CHEVAL": break; case "HOMME": break; default: break; }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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public static IAnimal CreateAnimal(string animal) { Object obj = null; if (!string.IsNullOrEmpty(animal)) { Assembly assembly = Assembly.GetExecutingAssembly(); Type[] mytypes = assembly.GetTypes(); foreach (Type t in mytypes) { if (t.IsClass) { IList<CustomAttributeData> lstAttributs = CustomAttributeData.GetCustomAttributes(t); foreach (CustomAttributeData atr in lstAttributs) { if ((atr.ConstructorArguments.Count > 0) && atr.ConstructorArguments[0].ToString().Replace("\"", "") == animal.ToUpperInvariant()) { try { obj = Activator.CreateInstance(t); break; } catch (ArgumentNullException ex) { throw(ex); } catch (ArgumentException ex) { throw(ex); } catch (NotSupportedException ex) { throw(ex); } catch (TargetInvocationException ex) { throw(ex); } catch (MethodAccessException ex) { throw(ex); } catch (MemberAccessException ex) { throw(ex); } catch (TypeLoadException ex) { throw(ex); } } } } } } else { } return (IAnimal)obj; }
"Winter is coming" (ma nouvelle page d'accueil)
Partager