C# Language Ejemplo de sobrecarga básica


Ejemplo

Este código contiene un método sobrecargado llamado 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);
    }
}

Cuando se llama al método principal , se imprimirá

int
double

En tiempo de compilación, cuando el compilador encuentra el método llamado Hello(0) , encuentra todos los métodos con el nombre Hello . En este caso, encuentra dos de ellos. Luego trata de determinar cuál de los métodos es mejor . El algoritmo para determinar qué método es mejor es complejo, pero generalmente se reduce a "hacer la menor cantidad posible de conversiones implícitas".

Por lo tanto, en el caso de Hello(0) , no se necesita conversión para el método Hello(int) pero se necesita una conversión numérica implícita para el método Hello(double) . Así, el primer método es elegido por el compilador.

En el caso de Hello(0.0) , no hay forma de convertir 0.0 a int implícita, por lo que el método Hello(int) ni siquiera se considera para la resolución de sobrecarga. Sólo queda el método y así lo elige el compilador.