C# Language Exemple de surcharge de base


Exemple

Ce code contient une méthode surchargée nommée Hello :

class Example
{
    public static void Hello(int arg)
    {
        Console.WriteLine("int");
    }
 
    public static void Hello(double arg)
    {
        Console.WriteLine("double");
    }
 
    public static void Main(string[] args) 
    {
        Hello(0);
        Hello(0.0);
    }
}

Lorsque la méthode principale est appelée, elle sera imprimée

int
double

Au moment de la compilation, lorsque le compilateur trouve l'appel à la méthode Hello(0) , il trouve toutes les méthodes portant le nom Hello . Dans ce cas, il en trouve deux. Il essaie ensuite de déterminer laquelle des méthodes est la meilleure . L'algorithme permettant de déterminer quelle méthode est la meilleure est complexe, mais cela revient généralement à "effectuer le moins de conversions implicites possible".

Ainsi, dans le cas de Hello(0) , aucune conversion n'est nécessaire pour la méthode Hello(int) mais une conversion numérique implicite est nécessaire pour la méthode Hello(double) . Ainsi, la première méthode est choisie par le compilateur.

Dans le cas de Hello(0.0) , il n'y a aucun moyen de convertir implicitement 0.0 en int , donc la méthode Hello(int) n'est même pas prise en compte pour la résolution de la surcharge. Seule la méthode reste et elle est donc choisie par le compilateur.