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:
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);
    }
}
Si je fais ce code de test:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
MaClasse elt = new MaClasse();
object o = 2;
elt.Test(o);
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
4
5
6
7
public class NewList<T> : List<T>
{
      public void Add(object o)
      {
          Add((T)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.

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?