Descripción general sobre sobrecarga en C #
En Sobrecarga en C #, el polimorfismo es un concepto de programación orientada a objetos que define la capacidad de un objeto, una variable o un método para asumir múltiples formas durante el tiempo de compilación / ejecución. Los factores en tiempo real como datos, parámetros, devolver un objeto, etc. determinan qué forma tomará el objeto / método / variable. Esto le permite al programador codificar de forma más genérica en lugar de específica. Por ejemplo, comes frutas. La forma en que come frutas depende de la fruta que se le proporciona en tiempo real. Comes una manzana de inmediato mientras pelas un plátano antes de comer. Sencillo.
¿Qué es la sobrecarga de métodos en C #?
La sobrecarga de métodos es la implementación en tiempo de compilación del concepto de polimorfismo. Los desarrolladores pueden definir métodos similares con el mismo nombre, que difieren en el número de argumentos, el orden de los argumentos o el tipo de argumentos. En el ejemplo de las frutas, no necesita definir métodos separados para cada fruta (eatApple, eat the banana, etc.). Puede usar el mismo nombre para comer fruta y pasarle diferentes parámetros. El compilador llamará automáticamente al método apropiado.
Tomemos la perspectiva de C # ahora. En los términos más simples, la sobrecarga de métodos en C # es cuando tiene dos o más métodos con el mismo nombre pero con firmas diferentes. Esto se puede lograr de varias maneras:
- El número diferente de parámetros.
- Diferentes tipos de parámetros.
- Diferente orden de parámetros.
- Parámetros opcionales
- Argumentos nombrados.
¿Cómo funciona la sobrecarga de métodos en C #?
Entonces, ¿cómo se llama el método apropiado basado en los argumentos / parámetros? Bueno, el compilador comprueba cada definición de método durante la compilación y vincula las llamadas a las definiciones respectivas. En caso de que haya dos métodos con el mismo nombre, el compilador verifica la firma de los métodos y vincula la definición apropiada a la llamada. Incluso si las firmas no pueden resolver la ambigüedad, el compilador busca la conversión implícita de argumentos para que coincidan con las firmas. Si una conversión implícita da como resultado una coincidencia de firma, se realiza el enlace. Si no, el compilador genera un error.
Veremos varios ejemplos a lo largo de este artículo para comprender el funcionamiento del compilador en varios tipos de sobrecarga de métodos.
Tipos de sobrecarga de métodos en C #
Aquí discutimos los diversos tipos de sobrecarga de métodos en C # que se detallan a continuación:
1. Diferente número de parámetros
La primera y más simple categoría de sobrecarga de métodos es cuando los métodos tienen un número diferente de parámetros en sus firmas.
Código
El siguiente ejemplo es bastante sencillo y es obvio.
using System;
public class Program
(
public static void Main()
(
Func(10);)
public static void Func(int a)
(
Console.WriteLine("Single Parameter");
)public static void Func(int a, int b)
(
Console.WriteLine("Multiple Parameters");
)
)
Salida:
2. Diferentes tipos de parámetros
Cuando las firmas de método tienen un parámetro o parámetros que difieren en los tipos. El número de parámetros puede o no ser el mismo.
Ejemplo 1
En el siguiente ejemplo, ambos métodos esperan un único argumento. Entonces, basado en el tipo de argumento pasado durante la llamada al método, el compilador enlaza la definición de método apropiada.
Código
using System;
public class Program
(
public static void Main()
(
Func("Hello World");
)
public static void Func(int a)
(
Console.WriteLine("Integer Parameter");
)
public static void Func(string b)
(Console.WriteLine("String Parameter");
)
)
Salida:
Ejemplo 2
Ahora, demos al compilador algo para pensar. Sobrecargaríamos un método de tipo doble y flotante. Sabemos que un número entero siempre se puede convertir implícitamente en un tipo flotante, así como en un tipo doble.
Cuando pasamos un argumento entero, el compilador busca la conversión implícita y encuentra que la mejor conversión posible es un entero para flotar. Por lo tanto, se llama al método float.
Código
using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
public static void Func(float b)
(
Console.WriteLine("Floating Point Parameter");
)
)
Salida:
3. Diferente orden de parámetros
Cuando el número y el tipo de argumentos son iguales, pero el orden en que se pasan difiere.
Ejemplo 1
El siguiente ejemplo es bastante sencillo.
Código
using System;
public class Program
(
public static void Main()
(
Func(10, 0.1);
)
public static void Func(int a, double b)
(
Console.WriteLine("Int-Double Parameters");
)
public static void Func(double a, int b)
(
Console.WriteLine("Double-Int Parameter");
)
)
Salida:
Ejemplo 2
¿Qué pasaría cuando pasamos dos argumentos enteros en el ejemplo anterior? Vamos a averiguar.
Código
Func(10, 1);
Salida:
4. Parámetros opcionales
Cuando definimos un parámetro opcional en la firma del método, el compilador lo trata como una sobrecarga del método.
Nota: Esto tiene prioridad sobre la conversión implícita.
Comprendamos esto con un ejemplo.
Ejemplo
En el siguiente ejemplo, le damos al compilador dos opciones. O bien puede convertir implícitamente el argumento para que coincida con la firma del método. O puede pasar el valor predeterminado del argumento opcional. El compilador prefiere el último enfoque.
Código
using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(int a, int b = 1)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
)
Salida:
5. Argumentos nombrados
C # tiene otra característica de pasar el nombre de los argumentos al llamar al método. Esto también ayuda en la sobrecarga de métodos. Los desarrolladores pueden elegir llamar a un método en particular, incluso si el argumento pasado hubiera llamado por defecto otro método. Aunque, los métodos sobrecargados deben diferir en la firma.
Ejemplo
En el siguiente ejemplo, le indicamos al compilador que llame a un método en particular pasando el nombre del parámetro. El compilador luego suspende su lógica de determinar el método más adecuado.
Código
using System;
public class Program
(
public static void Main()
(
Func(b: 10);
)
public static void Func(int a)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double b)
(
Console.WriteLine("Double Parameter");
)
)
Salida:
Reglas de sobrecarga de métodos en C #
Deben tenerse en cuenta las siguientes reglas al sobrecargar los métodos en su aplicación C #.
- La firma del método debe ser diferente. El número de argumentos, el tipo de argumentos o el orden de los argumentos deben ser diferentes.
- El tipo de retorno de los métodos no juega ningún papel en la sobrecarga de métodos.
- Los parámetros opcionales tienen prioridad sobre la conversión de tipo implícito al decidir qué definición de método vincular.
- La conversión de tipo implícito tiene prioridad sobre el método de la clase principal.
Ejercicio: para comprender esto, aquí hay un pequeño ejercicio para usted. Cree una clase primaria con un método que espere un entero Herede una clase secundaria. Sobrecargue el método de la clase primaria en la clase secundaria de modo que el método de la clase secundaria espere un argumento de tipo doble. Cree un objeto de clase secundaria y llame al método sobrecargado pasando un número entero. Mira qué pasa.
Conclusión
La sobrecarga de métodos es un concepto bastante poderoso. Es muy útil para escribir código elegante. Sin embargo, puede llegar hasta cierto punto cuando decenas de métodos están sobrecargados, y el desarrollador tiene que referirse a las definiciones de métodos al depurar las llamadas erróneas. Para evitar esto, a menudo se sugiere nombrar sus métodos de manera diferente cuando la sobrecarga tiende a escalar a un nivel superior.
Artículos recomendados
Esta es una guía de sobrecarga en C #. Aquí discutimos su Método, cómo funciona, tipos con ejemplos y reglas. También puede consultar nuestros otros artículos sugeridos para obtener más información:
- C # Mientras Loop
- C # si declaración
- Funciones de C #
- Usos de C #
- Guía de sobrecarga en C ++
- Sobrecarga en Java
- Sobrecarga de Python
- Sobrecarga y anulación en C #
- Conversión de tipos en Java con tipos y ejemplos