Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre otro de los mecanismos que hereda este lenguaje de C, como es la sobrecarga.

Anuncios

La sobrecarga en si es la posibilidad que nos brinda el lenguaje de poder disponer un mismo metodo con distintas variables, puede que no suene util pero en verdad es una herramienta muy practica, por ejemplo una sobrecarga (tambien conocida como overload) que hemos visto en algunas oportunidades es cuando trabajamos con distintos constructores de una clase, para entender mejor el concepto vamos a ver el siguiente ejemplo donde usaremos de nuevo el notepad para crear nuestro archivo con el nombre Sobrecarga.cs y agregaremos el siguiente codigo:

Sobrecarga.cs

using System;

class Calculos
{
	int valor;

	public int Calcular()
	{
		valor = 10;
		return valor;
	}

	public int Calcular(int dato)
	{
		valor = dato;
		return valor;
	}

	public int Calcular(int dato1, int dato2)
	{
		valor = dato1 + dato2;
		return valor;
	}

}

public class Program
{
	static int Main()
	{
		Calculos objeto = new Calculos();
		Console.WriteLine(objeto.Calcular());
		Console.WriteLine(objeto.Calcular(20));
		Console.WriteLine(objeto.Calcular(20,20));		
		return 0;
	}	
}
Anuncios
Anuncios

En este caso vamos a crear primero una clase llamada Calculos, donde tendremos una variable llamada valor de tipo int, despues tendremos el mismo metodo pero con distintas variables, en el primer metodo no tenemos variables y a valor le asignamos un dato, en el segundo metodo si recibimos un dato y en el bloque se lo asignamos a valor, nuestro ultimo metodo recibira dos valores y en el bloque haremos la suma de las dos valores y lo asignamos a valor, en todos los casos devolvemos a valor al final del metodo.

Nota: Les recuerdo que la buena practica para clases es que deben estar en distintos archivos pero no queria complicar de mas este programa.

Nuestro siguiente paso sera ver el main, donde crearemos un objeto de la clase Calculos llamado objeto, luego por medio de Console.WriteLine llamaremos a los tres metodos y veremos el resultado en pantalla, compilemos y veamos como funciona:

C:\Users\tinchicus\Documents\Visual Studio 2019>Sobrecarga
10
20
40

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Aqui tenemos un mismo metodo para poder hacer tres tareas distintas porque puede sucedernos que bajo ciertas circunstancias necesitamos un metodo con la capacidad de procesar otros valores con respecto al metodo original, como por ejemplo los constructores del post anterior, para cubrir esas necesidades podemos hacer la sobrecarga, otra practica que podemos hacer es la siguiente:

class Calculos
{
	int valor;

	public int Calcular()
	{
		valor = 10;
		return valor;
	}

	public float Calcular(int dato)
	{
		valor = dato;
		return (float)valor;
	}

	public string Calcular(int dato1, int dato2)
	{
		valor = dato1 + dato2;
		return valor.ToString();
	}

}
Anuncios

En esta modificacion los metodos devolveran tres tipos distintos de datos, a diferencia del anterior, el primer metodo lo dejamos igual, al segundo lo dijimos que devuelva un tipo float por eso lo unico que modificamos fue el return donde pusimos a float entre parentesis, esto se llama conversion explicita para que no devuelva error, recuerden que valor es de tipo int, en el tercer metodo le decimos que devuelva un tipo string, y para ello solo modificamos el return donde a valor le agregamos el metodo ToString, tambien para que no devuelva un error, si lo compilamos y probamos deberemos obtener el mismo resultado, esto no solo nos permite trabajar de una forma distinta sino a su vez nos permite “convertir” un dato para cubrir ciertas necesidades, especialmente cuando usemos objetos, para nuestro siguiente caso haremos la siguiente modificacion:

Nota: Existen metodos encargados de convertir un tipo en otro, p.e. ToString o parseFloat, pero en ciertas ocasiones no podran usarlos y estos seran mejores formas de hacerlo.
class Calculos
{
	int valor;

	public int Calcular(int prueba)
	{
		valor = 10;
		return valor;
	}

	public float Calcular(int dato)
	{
		valor = dato;
		return (float)valor;
	}

	public string Calcular(int dato1, int dato2)
	{
		valor = dato1 + dato2;
		return valor.ToString();
	}

}
Anuncios

En este caso modificaremos unicamente al primer metodo donde ahora recibira un valor de tipo int llamado prueba, si lo compilamos nos sucedera esto:

C:\Users\tinchicus\Documents\Visual Studio 2019>csc Sobrecarga.cs
Microsoft (R) Visual C# Compiler version 4.8.3761.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only
supports language versions up to C# 5, which is no longer the latest version. Fo
r compilers that support newer versions of the C# programming language, see http
://go.microsoft.com/fwlink/?LinkID=533240

Sobrecarga.cs(13,15): error CS0111: El tipo 'Calculos' ya define un miembro
        denominado 'Calcular' con los mismos tipos de parámetros
Sobrecarga.cs(7,13): (Ubicación del símbolo relacionado con el error anterior)

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

En realidad el problema es que nos dice que tenemos una funcion definida dos veces (duplicada), pero porque son iguales si son de distinto tipo y los parametros se llaman distinto? Esto sucede porque en realidad el lenguaje verifica unicamente el nombre de la funcion y los tipos de parametros que pasamos, entonces si lo analizamos desde ese punto de vista las dos funciones son iguales, si sacaramos el parametro o le cambiaramos el tipo se solucionaria el problema, entonces podemos decir el nombre de la funcion y los parametros informados (o no) son la firma de estos para el lenguaje.

Anuncios

Entonces veamos algunas caracteristicas de las sobrecargas:

  • Podemos tener varios metodos con el mismo nombre pero deben tener distintos parametros
  • Si tenemos varios con el mismo nombre y parametros nos dira que esta repetido
  • Pueden ser de diferentes tipos y pueden tener el mismo nombre
  • Las funciones internas no lo distinguen tampoco con respecto a otros metodos
  • El nombre de la funcion y los parametros son la firma de la funcion.
  • La sobrecarga no reemplaza sino que complementa a los metodos
Anuncios

En resumen, hoy hemos visto que es una sobrecarga, para que se usan, como se usan, como podemos definirlas, otras formas de definirla, las ventajas que nos devuelven, un error conceptual sobre las mismas, como solucionarlo y como podemos evitarlos, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00