Hello,
C'est plus par curiosité qu'autre chose mais je suis tombé sur un comportement que je ne comprend pas vraiment entre surcharge et héritage.
Voici un premier bout de code sur la surcharge:
Si je fais ce code de test:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class MaClasse { public void Test(int i) { } public void Test(object i) { Test((int)i); } }
Le code va passer dans la fonction "Test(object)", caster mon paramètre en int, et appeler la fonction "Test(int)"... parce que mon type "int" est plus haut dans la hiérarchie d'héritage que object. Donc la, je suis content. Maintenant un autre code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MaClasse elt = new MaClasse(); object o = 2; elt.Test(o);
Ici, on est plus ou moins dans la même situation. La classe List<T> a une methode "Add(T)", et donc j'avais espéré que mon code de Add(object) allait utiliser le Add(T) en second appel.... et bien non. Il va juste s'appeler en boucle et partir en StackOverflow.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class NewList<T> : List<T> { public void Add(object o) { Add((T)o); } }
Pour être tout a fait franc, il n'y a même pas besoin de lancer le code... Faire "F12" sur la ligne Add((T)o); vous emmènera a la ligne public void Add(object o).
Quelqu'un pourrait-il m'expliquer la différence?
Partager