C# | Sobrecarga de métodos

La sobrecarga de métodos es la forma común de implementar polimorfismos. Es la capacidad de redefinir una función en más de una forma. Un usuario puede implementar la sobrecarga de funciones definiendo dos o más funciones en una clase que comparten el mismo nombre. C# puede distinguir los métodos con diferentes firmas de métodos . es decir, los métodos pueden tener el mismo nombre pero con una lista de parámetros diferente (es decir, el número de parámetros, el orden de los parámetros y los tipos de datos de los parámetros) dentro de la misma clase. 

  • Los métodos sobrecargados se diferencian según el número y el tipo de los parámetros pasados ​​como argumentos a los métodos.
  • No se puede definir más de un método con el mismo nombre, Orden y tipo de argumentos. Sería un error del compilador.
  • El compilador no considera el tipo de retorno al diferenciar el método sobrecargado. Pero no puede declarar dos métodos con la misma firma y diferente tipo de retorno. Lanzará un error en tiempo de compilación. Si ambos métodos tienen los mismos tipos de parámetros, pero un tipo de retorno diferente, entonces no es posible.

¿Por qué necesitamos la sobrecarga de métodos?

Si necesitamos hacer el mismo tipo de operación de diferentes maneras, es decir, para diferentes entradas. En el ejemplo que se describe a continuación, estamos realizando la operación de suma para diferentes entradas. Es difícil encontrar muchos nombres significativos diferentes para una sola acción.

Diferentes formas de sobrecargar métodos 
: la sobrecarga de métodos se puede realizar cambiando:  

  1. El número de parámetros en dos métodos.
  2. Los tipos de datos de los parámetros de los métodos.
  3. El Orden de los parámetros de los métodos.

Al cambiar el número de parámetros 

C#

// C# program to demonstrate the function
// overloading by changing the Number
// of parameters
using System;
class GFG {
 
    // adding two integer values.
    public int Add(int a, int b)
    {
        int sum = a + b;
        return sum;
    }
 
    // adding three integer values.
    public int Add(int a, int b, int c)
    {
        int sum = a + b + c;
        return sum;
    }
 
    // Main Method
    public static void Main(String[] args)
    {
 
        // Creating Object
        GFG ob = new GFG();
 
        int sum1 = ob.Add(1, 2);
        Console.WriteLine("sum of the two "
                          + "integer value : " + sum1);
 
        int sum2 = ob.Add(1, 2, 3);
        Console.WriteLine("sum of the three "
                          + "integer value : " + sum2);
    }
}
Producción: 

sum of the two integer value : 3
sum of the three integer value : 6

 

Al cambiar los tipos de datos de los parámetros

C#

// C# program to demonstrate the function
// overloading by changing the Data types
//  of the parameters
using System;
class GFG {
 
    // adding three integer values.
    public int Add(int a, int b, int c)
    {
        int sum = a + b + c;
        return sum;
    }
 
    // adding three double values.
    public double Add(double a,
                      double b, double c)
    {
        double sum = a + b + c;
        return sum;
    }
 
    // Main Method
    public static void Main(String[] args)
    {
 
        // Creating Object
        GFG ob = new GFG();
 
        int sum2 = ob.Add(1, 2, 3);
        Console.WriteLine("sum of the three "
                          + "integer value : " + sum2);
        double sum3 = ob.Add(1.0, 2.0, 3.0);
        Console.WriteLine("sum of the three "
                          + "double value : " + sum3);
    }
}
Producción: 

sum of the three integer value : 6
sum of the three double value : 6

 

Cambiando el Orden de los parámetros

C#

// C# program to demonstrate the function
// overloading by changing the
// Order of the parameters
using System;
class GFG {
 
    // Method
    public void Identity(String name, int id)
    {
 
        Console.WriteLine("Name1 : " + name + ", "
                        + "Id1 : " + id);
    }
     
    // Method
    public void Identity(int id, String name)
    {
 
        Console.WriteLine("Name2 : " + name + ", "
                        + "Id2 : " + id);
    }
 
    // Main Method
    public static void Main(String[] args)
    {
 
        // Creating Object
        GFG obj = new GFG();
 
        obj.Identity("Akku", 1);
        obj.Identity(2, "Abby");
    }
}

Producción:

Name1 : Akku, Id1 : 1
Name2 : Abby, Id2 : 2

¿Qué sucede cuando la firma del método es la misma y el tipo de devolución es diferente?
El compilador dará un error ya que el valor devuelto por sí solo no es suficiente para que el compilador descubra qué función tiene que llamar. Solo si ambos métodos tienen diferentes tipos de parámetros (por lo tanto, tienen una firma diferente), entonces es posible la sobrecarga de métodos.

Ejemplo:

C#

// C# program to show error when method signature
// is the same and the return type is different.
using System;
class GFG {
 
    // adding two integer value.
    public int Add(int a, int b)
    {
 
        int sum = a + b;
        return sum;
    }
 
    // adding three integer value.
    public double Add(int a, int b)
    {
        double sum = a + b + 0.0;
        return sum;
    }
 
    // Main Method
    public static void Main(String[] args)
    {
 
        // Creating Object
        GFG ob = new GFG();
 
        int sum1 = ob.Add(1, 2);
        Console.WriteLine("sum of the two "
                          + "integer value :" + sum1);
 
        int sum2 = ob.Add(1, 2);
        Console.WriteLine("sum of the three "
                          + "integer value :" + sum2);
    }
}

Error de tiempo de compilación:

prog.cs(15,19): error CS0111: Ya se definió un miembro `GFG.Add(int, int)’. Cambie el nombre de este miembro o use diferentes tipos de parámetros 
prog.cs(7,16): (Ubicación del símbolo relacionado con el error anterior)

Publicación traducida automáticamente

Artículo escrito por Akanksha_Rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *