C# día 08: métodos avanzados
Vamos a ver algunas opciones interesantes que tienen los métodos en C#.
Para empezar, no podía faltar la sobrecarga:
/**
* Sobrecarga.cs
* Clase que muestra como aplicar sobrecarga en métodos
* de una clase. La sobrecarga consiste en crear varios métodos con el mismo
* nombre pero con distintos parámetros.
*/
using System;
// Vamos a declarar esto dentro del un espacio de nombres
namespace Calculadoras
{
public class Calculadora
{
string nombre;
// Método constructor
public Calculadora ()
{
}
// Método constructor SOBRECARGADO
public Calculadora (string nombre)
{
this.nombre = nombre;
}
// Método para sumar dos valores, enteros
public int sumar(int x, int y)
{
return (x + y);
}
// El mismo método, SOBRECARGADO con otros parámetros
public double sumar(double x, double y)
{
return (x + y);
}
// El mismo método, SOBRECARGADO con otros parámetros
public decimal sumar(decimal x, decimal y)
{
return (x + y);
}
// Función principal, para hacer pruebas
public static void Main ()
{
int a, b;
double v, w;
a = b = 6;
v = 9.66;
w = 14.666;
Calculadora calculadora = new Calculadora("Pexas Instruments");
System.Console.WriteLine("Sumando a y b = {0}", calculadora.sumar(a, b));
System.Console.WriteLine("Sumando v y w = {0}", calculadora.sumar(v, w));
}
}
} // fin de namespace
También podemos pasar un número variable de argumentos, y si se declaran de tipo object pueden contener cualquier cosa.
/**
* ParametrosVariables.cs
* Clase que muestra la forma de poder pasar un número variable de parámetros
* a una función
*/
using System;
// Vamos a declarar esto dentro del mismo espacio de nombres
// para importar la SuperCalculadora en otra clase tendríamos que usar using Calculadoras
namespace Calculadoras
{
public class SuperCalculadora
{
string nombre;
// Método constructor
public SuperCalculadora (string nombre)
{
this.nombre = nombre;
}
// Sumador con numero de parametros variable: params int[]
public int sumar(params int[] argumentos)
{
int resultado = 0;
int i;
// Recorremos los argumentos y vamos sumando
for (i = 0; i < argumentos.Length; i++)
{
resultado += argumentos[i];
}
return resultado;
}
// Comprobamos variables con numero de parametros de CUALQUIER TIPO
public void valores(params object[] argumentos)
{
int i;
// Recorremos los argumentos y vamos sumando
for (i = 0; i < argumentos.Length; i++)
{
System.Console.WriteLine("Nos han pasado {0}: {1}", i, argumentos[i]);
}
}
// Función principal, para hacer pruebas
public static void Main (string[] argumentos)
{
int i;
// Vamos a controlar que al menos se pasa un parametro
if (argumentos.Length < 1)
{
System.Console.WriteLine("Pasa algún parámetro por favor");
return;
}
// Vamos a comprobar los parametros pasados como argumento al programa
for(i = 0; i < argumentos.Length; i++)
{
System.Console.WriteLine("Parametros pasados{0}: {1}", i, argumentos[i]);
}
// Instanciamos la calculadora y vamos a ver
SuperCalculadora calculadora = new SuperCalculadora(argumentos[0]);
System.Console.WriteLine("Sumando valores = {0}", calculadora.sumar(4,5,11,87,23));
System.Console.WriteLine("Sumando valores = {0}", calculadora.sumar(66, 47));
calculadora.valores(66.6, -47, "Hola", true);
calculadora.valores(false, 29, "que tal", 31, 0, -19, "Como mola");
}
}
} // fin de namespace
Y por útlimo, vemos otra vez los métodos estáticos y el uso de otros espacios de nombres. Para que este ejemplo funcione hay que comentar el método Main de los códigos anteriores.
/**
* Estatico.cs
* Vemos el uso de una clase que se usa directamente, sin necesidad
* de crear instancias, como Console.
* Para conseguirlo se usan métodos static
* De paso vemos como invocar el namespace de las calculadoras
* Para compilar: csc Estatico.cs ParametrosVariables.cs, para ejecutar: Estatico.exe
*/
using System;
// Podemos incluir otra librería con using, pero si sus clases
// tienen funciones Main no nos dejará
using Calculadoras;
public class Estatico
{
// Aquí vemos una ´método estatico que para usarse no
// precisa que se instancie un objeto
public static void saluda()
{
System.Console.WriteLine("Que tal andamos");
}
public static int sumar(params int[] valores)
{
SuperCalculadora sCalculadora = new SuperCalculadora("Desde Estatico");
// Invocamos el método que nos ofrece SuperCalculadora
return sCalculadora.sumar(valores);
}
// Clase principal
public static void Main ()
{
// Invocamos el método directamente
Estatico.saluda();
System.Console.WriteLine("Si sumamos sale {0}", Estatico.sumar(15,69,33));
}
}
pello.io