Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido
Notas generales
Uso de mtodos
1
2
Uso de parmetros
16
29
Mtodos y parmetros
Mtodos y parmetros
Notas generales
Objetivo del tema
Explicacin previa
Para su informacin
Uso de mtodos
Uso de parmetros
Uno de los principios bsicos del diseo de aplicaciones es que deben estar
divididas en unidades funcionales, ya que las secciones pequeas de cdigo son
ms fciles de entender, disear, desarrollar y depurar. La divisin de una
aplicacin en unidades funcionales permite tambin la reutilizacin de
componentes funcionales en toda la aplicacin.
Una aplicacin C# est estructurada en clases que contienen bloques de cdigo
con nombre llamados mtodos. Un mtodo es un miembro de una clase que
lleva a cabo una accin o calcula un valor.
Al final de este mdulo, usted ser capaz de:
Crear mtodos estticos que aceptan parmetros y devuelven valores.
Pasar parmetros a mtodos de distintas maneras.
Declarar y usar mtodos sobrecargados.
Mtodos y parmetros
Uso de mtodos
Objetivo del tema
Explicacin previa
Definicin de mtodos
Llamadas a mtodos
Devolucin de valores
Mtodos y parmetros
Definicin de mtodos
Objetivo del tema
Explicacin previa
Main es un mtodo
z
using
using System;
System;
class
class ExampleClass
ExampleClass
{{
static
static void
void ExampleMethod(
ExampleMethod( ))
{{
Console.WriteLine("ExampleMethod");
Console.WriteLine("ExampleMethod");
}}
static
static void
void Main(
Main( ))
{{
//
// ...
...
}}
}}
Recomendacin al
profesor
Ejemplos de mtodos
El cdigo mostrado en la transparencia contiene tres mtodos:
El mtodo Main
El mtodo WriteLine
El mtodo ExampleMethod
El mtodo Main es el punto de entrada de la aplicacin, mientras que
WriteLine forma parte de Microsoft .NET Framework y se puede llamar
desde un programa. El mtodo WriteLine es un mtodo esttico de la clase
System.Console. El mtodo ExampleMethod pertenece a ExampleMethod y
contiene una llamada al mtodo WriteLine.
Todos los mtodos en C# pertenecen a una clase, al contrario de lo que ocurre
en otros lenguajes de programacin como C, C++ y Microsoft Visual Basic,
que permiten subrutinas y funciones globales.
Mtodos y parmetros
Creacin de mtodos
Cuando se crea un mtodo hay que especificar lo siguiente:
Nombre
Un mtodo no puede tener el mismo nombre que una variable, una constante
o cualquier otro elemento que no sea un cdigo y haya sido declarado en la
clase. El nombre del mtodo puede ser cualquier identificador permitido de
C# y distingue entre maysculas y minsculas.
Lista de parmetros
A continuacin del nombre del mtodo viene una lista de parmetros para el
mtodo. Esta lista aparece entre parntesis que deben estar presentes aunque
no hay ningn parmetro, como se ve en los ejemplos de la transparencia.
Cuerpo del mtodo
Despus de los parntesis viene el cuerpo del mtodo, que debe estar entre
llaves ({ y }) aunque no contenga ms que una instruccin.
Recomendacin al
profesor
Mtodos y parmetros
Llamadas a mtodos
Objetivo del tema
Explicacin previa
Llamadas a mtodos
Recomendacin al
profesor
Para hacer una llamada a un mtodo hay que emplear el nombre del mtodo
seguido de una lista de parmetros entre parntesis. Los parntesis son
obligatorios aunque el mtodo llamado no contenga ningn parmetro, como se
ve en el siguiente ejemplo.
MethodName( );
Mtodos y parmetros
Para que los mtodos de una clase puedan hacer llamadas a mtodos en otra
clase hay que:
Especificar la clase que contiene el mtodo que se desea llamar.
Para especificar la clase que contiene el mtodo se utiliza la siguiente
sintaxis:
ClassName.MethodName( );
Mtodos y parmetros
Mtodos y parmetros
Mtodos y parmetros
Presentar la instruccin
return y explicar cmo
usarla al final de un mtodo.
Explicacin previa
Normalmente, la ejecucin
de un mtodo se devuelve
al llamador cuando se llega
a la ltima instruccin del
mtodo, excepto si se utiliza
la instruccin return.
Return inmediato
}}
Recomendacin al
profesor
Console.WriteLine("Hello");
Console.WriteLine("Hello");
if
if (numBeans
(numBeans << 10)
10)
return;
return;
Console.WriteLine("World");
Console.WriteLine("World");
Return inmediato
Por defecto, un mtodo es devuelto a su llamador cuando se llega al final de la
ltima instruccin del bloque de cdigo. La instruccin return se utiliza cuando
se quiere que un mtodo sea devuelto inmediatamente al llamador.
El mtodo del siguiente ejemplo muestra Hola, y es inmediatamente devuelto
a su llamador:
static void ExampleMethod( )
{
Console.WriteLine("Hola");
return;
Console.WriteLine("mundo");
}
Este uso de la instruccin return no resulta muy til, ya que la llamada final a
Console.WriteLine no se ejecuta nunca. Si los avisos del compilador de C#
estn activados a nivel 2 o superior, el compilador mostrar el siguiente
mensaje: Detectado cdigo inaccesible.
Mtodos y parmetros
10
Si un mtodo est definido con un tipo de datos en lugar de void, return se usa
para asignar un valor a la funcin. Este punto se discutir ms adelante en este
mdulo.
Mtodos y parmetros
11
Explicacin previa
Variables locales
z
Se destruyen a la salida
Variables compartidas
z
Conflictos de mbito
z
Cada mtodo tiene su propio conjunto de variables locales, que slo se pueden
utilizar dentro del mtodo en el que estn declaradas. No es posible acceder a
las variables locales desde ninguna otra parte de la aplicacin.
Variables locales
Se pueden incluir variables locales en el cuerpo de un mtodo, como se ve en el
siguiente ejemplo:
static void MethodWithLocals( )
{
int x = 1; // Variable con valor inicial
ulong y;
string z;
...
}
Las variables locales pueden llevar asignado un valor inicial (como la variable x
en el cdigo del ejemplo anterior). La variable no estar inicializada si no se le
asigna un valor o si no tiene una expresin inicial para determinar un valor.
Mtodos y parmetros
Recomendacin al
profesor
12
Mtodos y parmetros
13
Variables compartidas
El siguiente cdigo intenta contar el nmero de veces que ha sido llamado un
mtodo:
Recomendacin al
profesor
Los desarrolladores
experimentados en Visual
Basic tal vez comenten que,
en Visual Basic, poner
static antes del nombre de
un mtodo hace que todas
las variables locales de ese
mtodo tengan clase de
almacenamiento esttico.
Recuerde este hecho,
aunque normalmente no
ser necesario mencionarlo.
class CallCounter_Bad
{
static void Init( )
{
int nCount = 0;
}
static void CountCalls( )
{
int nCount;
++nCount;
Console.WriteLine("Mtodo llamado {0} veces", nCount);
}
static void Main( )
{
Init( );
CountCalls( );
CountCalls( );
}
}
ste es el comportamiento
habitual de las variables
locales en C, C++ y Visual
Basic, por lo que no
deberan surgir demasiados
problemas.
En este ejemplo, nCount se declara como clase en vez de mtodo. Por lo tanto,
nCount se comparte entre todos los mtodos de la clase.
Mtodos y parmetros
14
Conflictos de mbito
En C# se puede declarar una variable local con el mismo nombre que una
variable de clase, aunque eso puede producir resultados inesperados. En el
siguiente ejemplo, NumItems est declarada como una variable de clase
ScopeDemo, y tambin como una variable local en Method1. Las dos variables
son completamente distintas. En Method1, NumObjetos se refiere a la variable
local, mientras que en Method2 se refiere a la variable de clase.
class ScopeDemo
{
static int numItems = 0;
static void Method1( )
{
int numItems = 42;
...
}
static void Method2( )
{
numItems = 61;
}
}
Mtodos y parmetros
15
Devolucin de valores
Objetivo del tema
Explicacin previa
La instruccin return se
puede utilizar para devolver
un valor desde un mtodo.
Se devuelve al llamador
static
static int
int DosMasDos(
DosMasDos( )) {{
int
int a,b;
a,b;
aa == 2;
2;
bb == 2;
2;
return
return aa ++ b;
b;
}}
int
int x;
x;
xx == DosMasDos(
DosMasDos( );
);
Console.WriteLine(x);
Console.WriteLine(x);
Mtodos y parmetros
16
La instruccin return
devuelve un valor al
llamador inmediatamente.
Lo mismo ocurre en C y
C++. En Visual Basic, las
funciones miembro
devuelven un valor por
asignacin al nombre de la
funcin sin causar un return
inmediato.
La palabra clave return seguida de una expresin hace que el mtodo finalice
inmediatamente y devuelve la expresin como valor de retorno del mtodo.
El siguiente ejemplo muestra cmo declarar un mtodo llamado DosMasDos
que devuelve el valor 4 a Main cuando hace una llamada a DosMasDos:
class ExampleReturningValue
{
static int DosMasDos( )
{
int a,b;
a = 2;
b = 2;
return a + b;
}
static void Main( )
{
int x;
x = DosMasDos( );
Console.WriteLine(x);
}
}
El valor devuelto es un int, ya que int es el tipo de retorno del mtodo. Cuando
se hace una llamada al mtodo, ste devuelve el valor 4. En este ejemplo, el
valor se almacena en la variable local x de Main.
Mtodos y parmetros
17
Uso de parmetros
Objetivo del tema
Explicacin previa
Parmetros de salida
Dependiendo de su
formacin, es posible que
los estudiantes tengan
distintas ideas sobre el paso
de parmetros. C no
permite directamente el
paso de parmetros por
referencia (en su lugar se
pasan punteros). C++
incluye un mecanismo de
paso por referencia,
adems de punteros
similares a los de C. En
Visual Basic, los parmetros
se pasan por referencia de
forma predeterminada,
salvo que se desactive esta
opcin con la palabra clave
ByVal.
Mtodos y parmetros
18
Explicacin previa
En la declaracin del
mtodo, los parmetros se
colocan entre los parntesis
que siguen al nombre del
mtodo.
Declaracin de parmetros
z
static
static void
void MethodWithParameters(int
MethodWithParameters(int n,
n, string
string y)
y)
{{ ...
}
... }
MethodWithParameters(2,
MethodWithParameters(2, "Hola,
"Hola, mundo");
mundo");
Declaracin de parmetros
Cada parmetro tiene un tipo y un nombre. Se pueden declarar parmetros
poniendo sus declaraciones entre los parntesis que siguen al nombre del
mtodo. La sintaxis que se utiliza es similar a la empleada para declarar
variables locales, salvo que las declaraciones de parmetros se separan con una
coma en lugar de un punto y coma.
El siguiente ejemplo muestra cmo declarar un mtodo con parmetros:
static void MethodWithParameters(int n, string y)
{
// ...
}
Mtodos y parmetros
19
Mtodos y parmetros
20
Explicacin previa
entrada
Paso por
por valor
valor
entrada Paso
entrada
entrada Paso
Paso por
por referencia
referencia
salida
salida
salida
salida
Para su informacin
Por valor
C no incluye ningn
mecanismo de paso por
referencia.
Por referencia
Parmetros
Parmetros de
de salida
salida
Mtodos y parmetros
21
Explicar el mecanismo de
paso por valor.
Explicacin previa
static
static void
void SumaUno(int
SumaUno(int x)
x)
{{
x++;
x++; //
// Incrementar
Incrementar xx
}}
static
static void
void Main(
Main( ))
{{
int
int kk == 6;
6;
SumaUno(k);
SumaUno(k);
}}
Console.WriteLine(k);
Console.WriteLine(k); //
// Muestra
Muestra el
el valor
valor 6,
6, no
no 77
Mtodos y parmetros
22
static void AddOne(int x)
{
x++;
}
static void Main( )
{
int k = 6;
AddOne (k);
Console.WriteLine(k); // Muestra el valor 6, no 7
}
Mtodos y parmetros
23
Explicar el mecanismo de
paso por referencia.
Explicacin previa
Un parmetro referencia es
una referencia a una
posicin de memoria.
Mtodos y parmetros
24
Mtodos y parmetros
25
Mtodos y parmetros
26
Parmetros de salida
Objetivo del tema
Explicacin previa
static
static void
void OutDemo(out
OutDemo(out int
int p)
p)
{{
//
// ...
...
}}
int
int n;
n;
OutDemo(out
OutDemo(out n);
n);
Como ocurre con la palabra clave ref, out afecta nicamente a un parmetro y
cada parmetro out debe estar separado de los dems.
En la llamada a un mtodo con un parmetro out hay que poner la palabra clave
out antes de la variable que se desea pasar, como en este ejemplo:
Mtodos y parmetros
27
int n;
DemoOut(out n);
Mtodos y parmetros
28
Explicacin previa
C# incluye un mecanismo
para pasar listas de
parmetros de longitud
variable.
static
static long
long AddList(params
AddList(params long[
long[ ]] v)
v)
{{
long
long total,
total, i;
i;
for
(i
for (i == 0,
0, total
total == 0;
0; ii << v.Length;
v.Length; i++)
i++)
total
total +=
+= v[i];
v[i];
return
return total;
total;
}}
static
static void
void Main(
Main( ))
{{
long
long xx == AddList(63,21,84);
AddList(63,21,84);
}}
Recomendacin al
profesor
Mtodos y parmetros
29
static long AddList (params long[ ] v)
{
long total;
long i;
for (i = 0, total = 0; i < v.Length; i++)
total += v[i];
return total;
}
Para su informacin
Como un parmetro params es siempre una tabla, todos los valores deben ser
del mismo tipo.
Mtodos y parmetros
30
Paso de valores
Hay dos maneras de pasar valores al parmetro params cuando se hace una
llamada a un mtodo con un parmetro de longitud variable:
Como una lista de elementos separados por comas (la lista puede estar
vaca)
Como una tabla
Ambas tcnicas se muestran en el siguiente cdigo. El compilador trata las dos
tcnicas de la misma forma.
static void Main( )
{
long x;
x = AddList (63, 21, 84); // Lista
x = AddList (new long[ ]{ 63, 21, 84 }); // Tabla
}
Mtodos y parmetros
31
Explicacin previa
Mecanismos
Eficiencia
z
Mecanismos
Los parmetros valor ofrecen cierta proteccin frente a modificaciones no
deseadas, ya que los cambios realizados dentro del mtodo no tienen efecto
fuera de l. Esto sugiere que los parmetros valor son la mejor opcin, salvo
que sea preciso pasar informacin fuera de un mtodo.
Recomendacin al
profesor
Eficiencia
En general, los tipos simples como int y long se pasan ms eficazmente por
valor.
Estos aspectos de eficiencia no forman parte del lenguaje, por lo que no hay que
tomrselos al pie de la letra. Aunque la eficiencia puede ser un punto a tener en
cuenta en aplicaciones grandes y que consumen muchos recursos, normalmente
es preferible preocuparse de la correccin, la estabilidad y la potencia del
programa antes que de la eficiencia. El empleo de buenas prcticas de
programacin tiene prioridad sobre la eficiencia.
Mtodos y parmetros
32
Explicacin previa
Recomendacin al
profesor
Directamente
Indirectamente
Un mtodo puede hacer una llamada a s mismo. Esta tcnica se conoce como
recursin y ofrece una solucin para ciertos tipos de problemas. Los mtodos
recursivos suelen ser tiles para manipular estructuras de datos ms complejas,
como listas y rboles.
Los mtodos en C# pueden ser mutuamente recursivos. Por ejemplo, puede
darse una situacin en la que un mtodo A llame a un mtodo B, y el mtodo B
llame al mtodo A.
Recomendacin al
profesor
Como puede verse, dentro del mtodo se hacen dos llamadas al mismo mtodo.
Mtodos y parmetros
33
Un mtodo recursivo debe tener una condicin de fin para que devuelva un
valor sin hacer ms llamadas. En el caso del mtodo Fibonacci, la condicin de
fin es n <= 2.
Mtodos y parmetros
34
Explicacin previa
Signaturas de mtodos
Los mtodos no pueden tener el mismo nombre que otros elementos en una
clase. Sin embargo, dos o ms mtodos en una clase s pueden compartir el
mismo nombre. A esto se le da el nombre de sobrecarga.
En esta seccin aprender a:
Declarar mtodos sobrecargados.
Utilizar signaturas en C# para distinguir mtodos que tienen el mismo
nombre.
Saber cundo usar mtodos sobrecargados.
Mtodos y parmetros
35
Explicacin previa
Para su informacin
class
class OverloadingExample
OverloadingExample
{{
static
static int
int Suma(int
Suma(int a,
a, int
int b)
b)
{{
return
return aa ++ b;
b;
}}
static
static int
int Suma(int
Suma(int a,
a, int
int b,
b, int
int c)
c)
{{
return
return aa ++ bb ++ c;
c;
}}
static
static void
void Main(
Main( ))
{{
Console.WriteLine(Suma(1,2)
Console.WriteLine(Suma(1,2) ++ Suma(1,2,3));
Suma(1,2,3));
}}
}}
Los mtodos sobrecargados son mtodos que tienen el mismo nombre dentro de
una clase. El compilador de C# distingue mtodos sobrecargados comparando
las listas de parmetros.
Mtodos y parmetros
Recomendacin al
profesor
36
Mtodos y parmetros
37
Signaturas de mtodos
Objetivo del tema
Explicacin previa
El compilador de C# puede
distinguir entre mtodos en
una clase examinando la
signatura de cada mtodo.
Definicin de signatura
Forman
Forman la
la definicin
definicin
de
la
signatura
de la signatura
No
No afectan
afectan aa la
la
signatura
signatura
Nombre
Nombredel
delmtodo
mtodo
Nombre
Nombrede
de parmetro
parmetro
Tipo
Tipode
deparmetro
parmetro
Tipo
Tipode
deretorno
retornode
de
Modificador
Modificador
mtodo
mtodo
Definicin de signatura
La signatura de un mtodo consta del nombre del mtodo, el nmero de
parmetros del mtodo y el tipo y modificador (como out o ref) de cada
parmetro.
Para su informacin
Los tres mtodos siguientes tienen distintas signaturas, por lo que pueden estar
declarados en la misma clase.
static int LastErrorCode( )
{
}
static int LastErrorCode(int n)
{
}
static int LastErrorCode(int n, int p)
{
}
Mtodos y parmetros
38
Mtodos y parmetros
39
Explicacin previa
Los mtodos sobrecargados son tiles si se tienen dos mtodos similares que
requieren distinto nmero o tipo de parmetros.
Mtodos y parmetros
40
El programa funciona, pero en la clase hay dos mtodos que realizan una tarea
prcticamente idntica aunque tengan nombres diferentes. Esta clase se puede
reescribir con sobrecarga de mtodos como se muestra a continuacin:
class GreetDemo
{
static void Greet( )
{
Console.WriteLine("Hola");
}
static void Greet(string Name)
{
Console.WriteLine("Hola " + Name);
}
static void Main( )
{
Greet( );
Greet("Alex");
}
}
Mtodos y parmetros
41