C# Language Esempio di sovraccarico di base


Esempio

Questo codice contiene un metodo sovraccarico denominato 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);
    }
}

Quando viene chiamato il metodo Main , verrà stampato

int
double

In fase di compilazione, quando il compilatore trova il metodo call Hello(0) , trova tutti i metodi con il nome Hello . In questo caso, ne trova due. Quindi cerca di determinare quale dei metodi è migliore . L'algoritmo per determinare quale metodo è migliore è complesso, ma in genere si riduce a "generare il minor numero possibile di conversioni implicite".

Pertanto, nel caso di Hello(0) , non è necessaria alcuna conversione per il metodo Hello(int) ma è necessaria una conversione numerica implicita per il metodo Hello(double) . Quindi, il primo metodo è scelto dal compilatore.

Nel caso di Hello(0.0) , non esiste alcun modo per convertire implicitamente 0.0 in un int , quindi il metodo Hello(int) non è nemmeno considerato per la risoluzione di sovraccarico. Rimane solo il metodo e quindi viene scelto dal compilatore.