Vous êtes sur la page 1sur 5

Elvis F.

Castro Valentn

TEMA: METODOS Los mtodos, tambin llamados funciones, son trozos de cdigo que reciben unos datos, hacen algo con esos datos, y a veces devuelven algn valor. En C#, todos los mtodos se encuentran contenidos dentro de una clase. La estructura mnima de un mtodo tiene las siguientes partes: o Static (opcional, si se indica se podr llamar al mtodo sin tener creada una instancia, o lo que es lo mismo, un objeto de la clase que contiene el mtodo) o o o o o Visibilidad del mtodo (public, protected, private) Tipo devuelto (opcional, puede no devolver nada, en cuyo caso se indica con la palabra clave void) Nombre del mtodo Parmetros (puede ser vaco) Cuerpo del mtodo

De forma que el siguiente mtodo: double Divide( double a, double b ){ return a/b; } Devuelve un tipo double, tiene por nombre Divide, los parmetros son a y b, ambos del tipo double, y el cuerpo del mtodo es simplemente "return a/b;". Para llamar a un mtodo, debemos simplemente poner el nombre del mtodo y sus argumentos dentro de un parntesis separado por comas. Para llamar al mtodo Divide declarado antes, simplemente debemos escribir Divide(8, 2); Segn lo que hemos visto, el ejemplo del mtodo Divide() completo necesita tener una clase donde definirse y un mtodo Main() donde ejecutarse. using System; class Ejemplo1{ public double Divide( double a, double b ) { return a/b; } public static void Main() { Ejemplo m = new Ejemplo(); Console.WriteLine( m.Divide(8, 2) ); } }

Pasando valores a los mtodos Parmetros La declaracin formal de parmetros tambin define variables. Hay cuatro tipos de parmetros: parmetros por valor, por referencia, parmetros de salida, y arreglos de parmetros.

1.

Paso por valor, El paso de parmetros por valor es usado por defecto para pasar parmetros a mtodos. Cuando se pasa un parmetro por valor a una funcin realmente se est pasando una copia de dicho parmetro, por lo que las modificaciones que le hagamos al parmetro dentro del mtodo no afectarn al parmetro original.

Lenguaje de Programacin C# - Mtodos

Elvis F. Castro Valentn

Ejemplo: using System; class Ejemplo2 { static void F(int p) { p++; Console.WriteLine("p = {0}", p); } static void Main() { int a = 1; Console.WriteLine("pre: a = {0}", a); F(a); Console.WriteLine("post: a = {0}", a); } } Aunque el valor del parmetro p haya sido modificado dentro del mtodo, ste parmetro solamente tena una copia del valor del parmetro a que pasamos al mtodo; por lo que cuando imprimimos el parmetro a vemos que ste parmetro ha mantenido su valor original.

2.

Paso por referencia, El paso de parmetros por referencia es la contraposicin lgica al paso por valor. En el paso por referencia no se realiza ninguna copia del objeto, sino que lo que se le pasa a la funcin es una referencia del objeto, de forma que el parmetro pasa directamente a la funcin y cualquier modificacin sobre el parmetro dentro de la funcin afectar al parmetro original. Ejemplo: using System; class Ejemplo3 { static void intercambiar(ref int a, ref int b) { // intercambia los dos valores int t = a; a = b; b = t; } static void Main() { int x = 1; int y = 2; Console.WriteLine("antes: x = {0}, y = {1}", x, y); intercambiar(ref x, ref y); Console.WriteLine("despues: x = {0}, y = {1}", x, y); } } La palabra clave ref debe de ser usada tanto en la declaracin formal de la funcin como en los usos que se hace de sta.

3.

Parmetro de salida, El parmetro de salida es similar al parmetro por referencia, salvo que el valor inicial de dicho argumento carece de importancia. Un argumento de salida se declara con el modificador out. Ejemplo: using System; class Ejemplo4 { static void Divide(int num1, int num2, out int result, out int resid) { result = num1 / num2; resid = num1 % num2; } static void Main() { int valor1 = 10; int valor2 = 3;

Lenguaje de Programacin C# - Mtodos

Elvis F. Castro Valentn int respuesta, residuo; Divide(valor1, valor2, out respuesta, out residuo); Console.WriteLine("La divisin de {0} para {1} = {2} con un residuo de {3}", valor1, valor2, respuesta, residuo); } } En el ejemplo anterior se muestra un mtodo Divide que incluye dos parmetros de salida. Uno para el resultado (variable result) de la divisin y otro para el resto (variable resid). Vemos que estos resultados son asignados a las variables respuesta y residuo respectivamente.

4.

Arreglo de parmetros, Habr ocasiones que necesitemos pasar varios parmetros a un mtodo (o funcin) pero no sabremos con anticipacin cuantos parmetros tendremos que pasar; para esto podremos usar un arreglo de parmetros. Un arreglo de parmetros permite guardar una relacin de varios a uno: varios argumentos pueden ser representados por un nico arreglo de parmetros. En otras palabras, los arreglos de parmetros permiten listas de argumentos de tamao variable. Un arreglo de parmetros se declara con el modificador params. Slo puede haber un arreglo de parmetros en cada mtodo, y siempre debe ser el ltimo parmetro especificado. El tipo del arreglo de parmetros debe ser siempre un tipo arreglo unidimensional. Al llamar a la funcin se puede pasar uno o varios argumentos del tipo del arreglo. Ejemplo: using System; class Ejemplo5 { //Metodo con arreglo de parametros static int sumaDatos(params int[] d){ int s=0; foreach (int n in d) s = s + n; return s; } public static void Main(string[] args){ Console.WriteLine("La suma es:{0}",sumaDatos(10,20,30)); Console.ReadKey(true); } }

Modificadores public y static El modificador public lo hemos utilizado anteriormente. Se puede utilizar en la declaracin de cualquier mtodo o variable, y como es de esperar, produce el efecto de que el campo afectado se vuelve pblico, esto es, se puede utilizar desde otras clases. using System; class Principal{ public double Divide( double a, double b ){ return a/b; } public static void Main(){ Principal m = new Principal(); Console.WriteLine( m.Divide(8, 2) );

Lenguaje de Programacin C# - Mtodos

Elvis F. Castro Valentn }

Si por ejemplo intentamos declarar el mtodo Divide sin el modificador public, obtendremos un error en tiempo de compilacin. El modificador complementario de public es private, que provoca que el mtodo o dato solo sea accesible desde la clase en la que est declarado. Si no se especifica nada, se toma por defecto el modificador private. Adems, tampoco es necesario crear una instancia de la clase slo para acceder a un mtodo declarado en ella. Para eso debemos anteponer a la declaracin del mtodo el modificador static. Los mtodos estticos se caracterizan por no necesitar una instancia de la clase para cumplir su funcin, pero como contrapartida, no pueden acceder a datos propios de la clase. Ejemplo: using System; class Principal{ public static double Divide( double a, double b ){ return a/b; } public static void Main(){ Console.WriteLine(Divide(8, 2) ); }

Los mtodos estticos se utilizan en multitud de situaciones. Por ejemplo, el mtodo Console.WriteLine() o las funciones de la librera matemtica estndar no son ms que mtodos estticos de sus respectivas clases. Constructores e instancias de una clase Como hemos visto, las instancias de una clase se crean con la sintaxis: nombreclase objeto = new nombreclase( argumentos ); Donde nombre clase es el nombre que le hemos dado a la definicin de la clase, argumentos es una lista de argumentos posiblemente vaca y objeto es el nombre que queremos darle a la instancia de la clase. Una vez creada una clase, sus miembros se inicializan a sus valores predeterminados ( cero para valores numricos, cadena vaca para el tipo string, etc. ). La siguiente clase representa un punto sobre el plano, de forma que tiene dos valores pblicos X e Y, y un mtodo que calcula la distancia al origen del punto (mdulo) Ejemplo: using System; class Punto{ public double X; public double Y; public double Modulo() { double d; d = Math.Sqrt(X*X + Y*Y);//Sqrt = raiz cuadrada return d; } } class Principal{ public static void Main() { Punto A = new Punto(); A.X = 1; A.Y = -1; Console.WriteLine("El modulo del punto (1,1) es: {0}", A.Modulo() ); } Lenguaje de Programacin C# - Mtodos

Elvis F. Castro Valentn } Ahora bien, la forma en la que se crea la instancia, es decir, inicializando los datos a cero (ejercicio: comprobar esto), se puede personalizar, de forma que podemos construir nuestro propio constructor que le diga a la clase los valores por defecto que debe tomar. Esto se realiza simplemente escribiendo dentro de la clase un mtodo que tenga el mismo nombre que la clase y en el que no se especifica el valor devuelto. La clase Punto con un constructor sera as: using System; class Punto{ public double X; public double Y; public Punto(){ X = 1; Y = 1; } //constructor

public double Modulo() { double d; d = Math.Sqrt(X*X + Y*Y);//Sqrt = raiz cuadrada return d; }

Sobrecarga de mtodos En C#, al igual que en C++ y en Java es posible definir varios mtodos con el mismo nombre pero con distintos parmetros, de forma que el compilador decide a cul se llama dependiendo de los parmetros que le lleguen. Esto es muy prctico, pues no tienes que renombrar cada funcin segn el tipo de valor que acepta. El siguiente ejemplo implementa un par de mtodos que elevan al cuadrado el valor que reciben, y se implementan para tipos double y para int. En C, que es un lenguaje que no soporta sobrecarga de mtodos, se tendra que haber llamado distinto a ambos mtodos, por ejemplo alcuadrado_double y alcuadrado_int Ejemplo: using System; class Principal{ public static double AlCuadrado( int a ){ return a*a; } public static double AlCuadrado( double a ){ return a*a; } public static void Main() { Console.WriteLine("4 al cuadrado es {0}", AlCuadrado(4) ); Console.WriteLine("3.2 al cuadrado es {0}", AlCuadrado(3.2) ); } }

Lenguaje de Programacin C# - Mtodos

Vous aimerez peut-être aussi