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 namespaceTambié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 namespaceY 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)); } }