Está en la página 1de 92

1

Tema 4. Introduccin a C#

Juan Carlos Ruiz, ITACA-UPV, 2008

Formacin especfica, cursos verano 2008 ETS de Informtica Aplicada Universidad Politcnica de Valencia

Objetivos
Describir la estructura bsica de un programa C# Describir los aspectos bsicos del lenguaje de programacin C# Utilizar el Visual Studio .NET para el desarrollo, depuracin y ejecucin de aplicaciones C#

Juan Carlos Ruiz, ITACA-UPV, 2008

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

Caractersticas de C#
Sencillez Modernidad Orientacin a objetos Orientacin a componentes Gestin automtica de memoria Seguridad de tipos Instrucciones seguras Sistema de tipos unificado Extensibilidad de tipos bsicos Extensibilidad de operadores Extensibilidad de modificadores Versionable Eficiente Compatible

Juan Carlos Ruiz, ITACA-UPV, 2008

Mi primer programa C#
Hola Mundo!
using System; using System.Windows.Forms; class HolaMundoWindows { public static void Main() { Form holaForm = new Form(); holaForm.Text = "Hola Mundo!"; Application.Run(holaForm); } }

Juan Carlos Ruiz, ITACA-UPV, 2008

Hola Mundo!
Compilacin
Smbolo de sistema de Visual Studio .NET
csc HolaMundoWindows.cs

Ejecucin

Juan Carlos Ruiz, ITACA-UPV, 2008

doble-click

Hola Mundo!
Compilacin
Smbolo de sistema de Visual Studio .NET
csc /target:winexe HolaMundoWindows.cs

Ejecucin

Juan Carlos Ruiz, ITACA-UPV, 2008

doble-click

Hola Mundo!
ILDASM
Abrir el fichero HolaMundoWindows.exe

Juan Carlos Ruiz, ITACA-UPV, 2008

10

La clase
Toda aplicacin C# es un conjunto de clases, estructuras y tipos de datos Una clase es un conjunto de propiedades y mtodos Sintaxis
class nombre { ... }
Juan Carlos Ruiz, ITACA-UPV, 2008

Una clase est contenida en un nico fichero Un fichero puede contener mltiples clases

11

El mtodo Main
Es el punto de entrada de la aplicacin
public public public public static static static static void Main() int Main() void Main(string[] args) int Main(string[] args)

Juan Carlos Ruiz, ITACA-UPV, 2008

12

Espacios de nombres
Existe un gran nmero de clases organizadas por espacios de nombres Hacer referencia a una clase por su espacio de nombres
System.Windows.Forms.Form holaForm = new System.Windows.Forms.Form();

Utilizando la directiva using


Juan Carlos Ruiz, ITACA-UPV, 2008

using System.Windows.Forms; ... Form holaForm = new Form();

Juan Carlos Ruiz, ITACA-UPV, 2008

Espacios de nombres
13

14

Comentarios
Proporcionan documentacin adecuada para determinadas secciones de cdigo Comentarios de una lnea
// Esto es un comentario de una sola lnea

Comentarios de varias lneas


/* Esto es un comentario que se extiende
Juan Carlos Ruiz, ITACA-UPV, 2008

a lo largo de varias lneas */

15

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

16

Variables
Disponen de un determinado tipo de datos que indica qu valores puede contener
Variables tipo valor
Almacenan los datos directamente
Juan Carlos Ruiz, ITACA-UPV, 2008

Variables tipo referencia


Almacenan referencias a los datos (objetos) Diferentes variables pueden referenciar al mismo objeto Las operaciones realizadas sobre una pueden afectan a las dems

Cada una dispone de su propia copia de los datos Las operaciones realizadas sobre una no afectan a las dems

17

Tipos valor
Todos derivan de System.ValueType
Tipos predefinidos o tipos bsicos o tipos simples Tipos definidos por el usuario
struct enum

Juan Carlos Ruiz, ITACA-UPV, 2008

Todos almacenan directamente sus datos y no pueden ser null (excepto string y object) Los tipos predefinidos pueden contener un valor literal

Tipos predefinidos/bsicos/simples
Se identifican por palabras reservadas que son alias de tipos struct predefinidos
Tipo System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64
Juan Carlos Ruiz, ITACA-UPV, 2008

18

Descripcin

Bits 8 8 16 16 32 32 64 64 32 64 128 32 16 Variable Variable

Rango de valores [-128, 127] [0, 255] [-32768, 32767] [0, 65535] [-2147483648, 2147483647] [0, 4294967295] [-9223372036854775808, 9223372036854775807] [0, 18446744073709551615] [-1.5 1045, 3.4 1038] [-5.0 10324, 1.7 10308] [-1.0 1028, 7.9 1028] true, false [\u0000, \uFFFF] El permitido por la memoria Cualquier objeto

Alias sbyte byte short ushort int unit long ulong float double Decimal Bool char string object

Bytes con signo Bytes sin signo


Enteros cortos con signo Enteros cortos sin signo Enteros normales Enteros normales sin signo Enteros largos Enteros largos sin signo Reales con 7 dgitos de precisin Reales con 15-16 dgitos de precisin Reales con 28-29 dgitos de precisin Valores lgicos Caracteres Unicode Cadenas de caracteres Cualquier objeto

System.Single System.Double System.Decimal System.Boolean System.Char System.String System.Object

19

Identificadores
Nombre con el que se identifica un elemento del cdigo Reglas
Deben comenzar por carcter alfanumrico (excepto dgitos) o underscore El resto de caracteres pueden ser caracteres alfanumricos o underscores No utilizar palabras reservadas
C3PO l 2horas C# a!b _hola_ AB __OK

Juan Carlos Ruiz, ITACA-UPV, 2008

20

Palabras reservadas
abstract as char do base bool const enum for break byte case catch checked class double else float continue decimal default delegate event explicit extern if lock false implicit long override return string uint

finally fixed in int

foreach goto internal is object public

interface new null

Namespace params sbyte struct


Juan Carlos Ruiz, ITACA-UPV, 2008

operator out readonly ref static typeof

private protected sealed switch short this sizeof throw unsafe

stackalloc true ushort try using

ulong

unchecked

virtual void

volatile while

21

Declaracin de variables
Declaracin
tipoVariable nombreVariable; int a; int x, y, z;

Juan Carlos Ruiz, ITACA-UPV, 2008

Asignacin de valores a variables


No es posible utilizar variables sin inicializar Asignacin de valores a variables ya declaradas
nombreVariable = valor; int x; x = 10; int a = 20;

22

Juan Carlos Ruiz, ITACA-UPV, 2008

23

Literales
Los literales son la representacin explcita de los valores que puede adoptar los tipos bsicos de datos Literales enteros
Decimal (0-9) Hexadecimal (0-9, a-f, A-F) con prefijo (0x) Operadores positivo (+) y negativo (-)
0 -12 +34 0x5A6 -0xB78

Juan Carlos Ruiz, ITACA-UPV, 2008

24

Literales
Literales reales
Como los enteros decimales Parte entera y real separada por punto decimal (.) Notacin cientfica, exponente (e, E)
0.0
Juan Carlos Ruiz, ITACA-UPV, 2008

-12.5

+34.8

56.3e-2

7.88E5

Literales lgicos
true false

25

Literales
Literales de carcter
Cualquier carcter entre comillas simples (x), excepto
Carcter Comilla simple Comilla doble Carcter nulo Alarma Retroceso
Juan Carlos Ruiz, ITACA-UPV, 2008

Cdigo Unicode \u0027 \u0022 \u0000 \u0007 \u0008 \u000C \u000A \u000D \u0009 \u000B \u005C

Cdigo de escape \ \ \0 \a \b \f \n \r \t \v \\

Salto de pgina Nueva lnea Retorno de carro Tabulacin horizontal Tabulacin vertical Barra invertida

26

Literales
Literales de carcter
Pueden utilizarse tambin los cdigos Unicode
Formato comprimido (\x)
No es necesario escribir los ceros a la izquierda Slo vlido para los literales

a G x ? \ \f \U00000008 \u0008 \x8


Juan Carlos Ruiz, ITACA-UPV, 2008

Literal nulo
Se utilizan para variables de objeto no inicializadas
null

27

Literales
Literales de cadena
Secuencia de caracteres entre comillas dobles (x) Cadenas planas o verbatim
Preceder la cadena por (@) Los cdigos de escape no se interpretan
Literal de cadena
Juan Carlos Ruiz, ITACA-UPV, 2008

Interpretado como Hola Hola Mundo Hola Mundo Mundo Hola\tMundo

Hola\tMundo @Hola\tMundo @Hola Mundo @Hola Mundo

28

Operadores
Un operador es un smbolo que permite realizar una operacin entre operandos y devuelve un resultado Operacin Suma Operadores aritmticos
Deteccin de desbordamiento
checked
lanza System.OverflowException
Juan Carlos Ruiz, ITACA-UPV, 2008

Operador + * / % +

Resta Multiplicacin Divisin Mdulo Menos unario Ms unario

unchecked
devuelve el resultado truncado

checked(expresinAritmtica) unchecked(expresinAritmtica)

29

Operadores
Operaciones lgicas
Evaluacin perezosa

Operacin Operador and or not xor && y & || y | ! ^

Operaciones relacionales Operaciones de manipulacin de bits


Operacin and or
Juan Carlos Ruiz, ITACA-UPV, 2008

Operador & | ^ << >>

Operacin Igualdad Desigualdad Mayor que Menor que Mayor o igual que Menor o igual que

Operador == != > < >= <=

xor Desplazamiento a izquierda Desplazamiento a derecha

30

Operadores
Operaciones de asignacin (=)
Adems de realizar la asignacin, devuelve el valor asignado
int distancia = 0; distancia = distancia + 10;

Asignacin compuesta
Juan Carlos Ruiz, ITACA-UPV, 2008

(+=, -=, *=, /=, %=, &=, |=, ^=, >>=, <<=)
distancia += 10;

31

Operadores
Operaciones de asignacin
Incremento (++) y decremento(--)
Incrementar en 1 es muy comn cuenta = cuenta + 1; cuenta += 1; cuenta++; Existe en dos formas int cuenta = 10; int a = cuenta++; // a = 10; cuenta = 11; int b = ++cuenta; // b = 12; cuenta = 12;

Juan Carlos Ruiz, ITACA-UPV, 2008

32

Operadores
Operaciones con cadenas
Concatenacin de cadenas (+)
string holaMundo1 = Hola + Mundo; string holaMundo2 = Hola Mund + o;

Operaciones de acceso a tablas


Juan Carlos Ruiz, ITACA-UPV, 2008

tabla[posicinElemento]

33

Operadores
Operacin condicional
condicin?expresin1:expresin2

Si condicin es cierta devuelve el resultado de evaluar expresin1, sino devuelve el resultado de evaluar expresin2
int cociente=(divisor>0)?(dividendo/divisor):0;
Juan Carlos Ruiz, ITACA-UPV, 2008

Operaciones de acceso a objetos


objeto.miembro

34

Operadores
Operaciones de obtencin de informacin sobre tipos
Objeto System.Type con informacin del tipo
typeof(nombreTipo)

Determinar si una expresin es de un tipo determinado


expresin is nombreTipo
Juan Carlos Ruiz, ITACA-UPV, 2008

Nmero de bytes que ocupa un objeto de ese tipo en memoria (cdigo inseguro)
sizeof(nombreTipo)

35

Operadores
Operaciones de conversin entre tipos
(nombreTipo) expresin

Devuelve System.InvalidCastException en caso de conversin invlida


expresin as tipoDestino

Juan Carlos Ruiz, ITACA-UPV, 2008

Aplicable slo a tipos referencia con conversiones predefinidas en el lenguaje Devuelve null en caso de conversin invlida

Tipos definidos por el usuario: Enumeracin


Estructura que define los valores literales que pueden tomar sus objetos
Soluciona los problemas de los nmeros mgicos
enum nombreEnumeracin:nombreTipo { literales
Juan Carlos Ruiz, ITACA-UPV, 2008

36

El tipo por defecto de los literales es int

Tipos definidos por el usuario: Enumeracin


enum Color {Rojo, Verde, Azul} enum TipoCuenta { Corriente, Ahorros, Vivienda, PlanJubiliacion }

37

Juan Carlos Ruiz, ITACA-UPV, 2008

Tipos definidos por el usuario: Estructura


Tipo especial de clase que representa objetos ligeros Todos los tipos bsicos son estructuras
Excepto string y object
struct Alumno { string Nombre; int numeroExpediente; } Alumno nuevoAlumno; nuevoAlumno.Nombre = John Doe; nuevoAlumno.numeroExpediente = 123456;

38

Juan Carlos Ruiz, ITACA-UPV, 2008

39

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

40

Instrucciones
Una instruccin es cualquier accin que se pueda realizar en el cuerpo de un mtodo Las instrucciones se agrupan en bloques
{ listaInstrucciones }
{
Juan Carlos Ruiz, ITACA-UPV, 2008

int A; } { int A; }

{ int A; { int A; } }

{ { int A; } A = 1; }

41

Tipos de instrucciones
Condicionales o de seleccin (if y switch)
Permiten ejecutar bloques de instrucciones slo si se cumple una determinada condicin

Iterativas (while, do, for y foreach)


Permiten ejecutar repetidamente un bloque de instrucciones si se cumple una determinada condicin

De salto (goto, break y continue)


Juan Carlos Ruiz, ITACA-UPV, 2008

Permiten variar el orden normal en el que se ejecutan las instrucciones

42

Instrucciones condicionales
Instruccin if
Permite ejecutar ciertas instrucciones si se da determinada condicin
if condicin instruccionesIf else instruccionesElse if ((carta = Tipo.Treboles) || (carta = Tipo.Picas)) Console.WriteLine(Color negro); else Console.WriteLine(Color rojo);

Juan Carlos Ruiz, ITACA-UPV, 2008

43

Instrucciones condicionales
Instruccin switch
Permite ejecutar unos bloques de instruccin u otros atendiendo a determinada condicin
switch(expresin) { case valor1: bloque1 siguienteAccin case valor2: bloque2 siguienteAccin ... default: bloqueDefault siguienteAccin }

siguienteAccin puede ser:


goto case valorI; ; goto default; break;

Juan Carlos Ruiz, ITACA-UPV, 2008

switch(carta) { case Tipo.Corazones: case Tipo.Diamantes: Console.WriteLine(Color rojo); break; case Tipo.Treboles: case Tipo.Picas: Console.WriteLine(Color negro); break; default: Console.WriteLine(ERROR); break; }

44

Instrucciones iterativas
Instruccin while
Permite ejecutar un bloque de instrucciones mientras se de una determinada condicin
while(condicin) instrucciones int i = 0; while(i < 10) { Console.WriteLine(i); i++; } // 0 1 2 3 4 5 6 7 8 9

Juan Carlos Ruiz, ITACA-UPV, 2008

45

Instrucciones iterativas
Instruccin dowhile
Variante de while que evala la condicin al final del bucle Las instrucciones se ejecutan por lo menos una vez
do instrucciones while (condicin); int i = 0; do { Console.WriteLine(i); i++; } while(i < 10); // 0 1 2 3 4 5 6 7 8 9

Juan Carlos Ruiz, ITACA-UPV, 2008

46

Instrucciones iterativas
Instruccin for
Variante de while que permite reducir el cdigo necesario para los bucles ms utilizados
for(inicializacin;condicin;modificacin) instrucciones for(int i = 0; i < 10; i++) { Console.WriteLine(i); } // 0 1 2 3 4 5 6 7 8 9

inicializacin y modificacin pueden incluir diversos valores


Juan Carlos Ruiz, ITACA-UPV, 2008

separados por comas (,)


for(int i = 0, j = 10; i < 10; i++, j--) { Console.WriteLine(({0} {1}), i, j); } //(0 10)(1 9)(2 8)(3 7)(4 6)(5 5)(6 4)(7 3)(8 2)(9 1)

47

Instrucciones iterativas
Instruccin foreach
Variante de for para el tratamiento de todos los elementos de una coleccin
foreach(tipoElemento elemento in coleccin) instrucciones
public static void Main(string[] args) { for(int i = 0; i < args.Length; i++) {
Juan Carlos Ruiz, ITACA-UPV, 2008

Console.WriteLine(args[i]); } }

public static void Main(string[] args) { foreach(string dato in args) { Console.WriteLine(dato); } }

48

Instrucciones de salto
Instruccin break
Se utiliza en bloques de instrucciones asociados a instrucciones iterativas o a la instruccin switch Termina la ejecucin del bloque y contina ejecutando la instruccin siguiente al mismo
break;

Instruccin continue
Se utiliza en bloques de instrucciones asociados a instrucciones iterativas Reevala la condicin del bucle sin ejecutar el resto de instrucciones del mismo
continue;

Juan Carlos Ruiz, ITACA-UPV, 2008

49

Instrucciones de salto
Instruccin goto
Pasa a ejecutar la instruccin etiquetada en el

goto
goto etiqueta;

Juan Carlos Ruiz, ITACA-UPV, 2008

Slo se pueden etiquetar instrucciones No se pueden etiquetar instrucciones en bloques anidados ni en mtodos diferentes al del goto Evitar su uso si es posible

50

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

51

Excepciones
Preparan los programas para lo inesperado Tradicionalmente, los mtodos devuelven cdigos informativos
El cdigo de la lgica del programa y del tratamiento del error estn mezclados Todos los cdigos de error son parecidos Cdigos de error no significativos por s mismos Los cdigos de error se definen a nivel de mtodo Los cdigos de error son muy fciles de ignorar

Juan Carlos Ruiz, ITACA-UPV, 2008

52

Excepciones
Objetos que se generan en tiempo de ejecucin cuando se produce algn error Derivan de la clase System.Exception Proporcionan
Claridad en el cdigo generado
Juan Carlos Ruiz, ITACA-UPV, 2008

Informacin acerca del error ocurrido Tratamiento del error asegurado

53

Excepciones
Ejemplo de excepciones predefinidas
Excepcin ArgumentException DivideByZeroException Divisin por cero Causa Argumento no vlido

IndexOutOfRangeException ndice de acceso a un elemento fuera del rango permitido OverflowException


Juan Carlos Ruiz, ITACA-UPV, 2008

Desbordamiento Falta de memoria al crear un nuevo objeto Desbordamiento de la pila

OutOfMemoryException StackOverflowException

54

Captura de excepciones
Instruccin trycatch
Separa la lgica del programa del tratamiento del error try
try { Console.Write(Dividendo: ); int i = Int32.Parse(Console.ReadLine()); Console.Write(Divisor: ); int j = Int32.Parse(Console.ReadLine()); int k = i/j; } catch(OverflowException oe) { Console.WriteLine(oe); } catch(DivideByZeroException dbze) { Console.WriteLine(dbze); }

Juan Carlos Ruiz, ITACA-UPV, 2008

instrucciones catch(excepcin1) tratamiento1 catch(excepcin2) tratamiento2 ... finally instruccionesFinally

55

Captura de excepciones
Bloque catch general
Puede capturar cualquier excepcin independientemente de su clase No proporciona informacin acerca del error
try { Console.Write(Introduce el dividendo: ); int i = Int32.Parse(Console.ReadLine()); Console.Write(Introduce el divisor:); int j = Int32.Parse(Console.ReadLine()); int k = i/j;
Juan Carlos Ruiz, ITACA-UPV, 2008

} catch { Console.WriteLine(ERROR EN LOS DATOS INTRODUCIDOS); }

56

Lanzamiento de excepciones
Los programadores pueden lanzar las excepciones del sistema o las suyas propias
throw objetoExcepcinALanzar;

Ejemplo
Juan Carlos Ruiz, ITACA-UPV, 2008

Console.Write(Introduce un nmero del 1 al 10: ); int i = Int32.Parse(Console.ReadLine()); if ((i < 0) || (i > 10)) { throw new NumeroNoValidoException(); }

57

Lanzamiento de excepciones
Desde un bloque catch es posible relanzar la excepcin que ha sido capturada
catch { ... throw caught; } catch { ... throw; }

Tambin es posible lanzar una excepcin de un tipo distinto


Juan Carlos Ruiz, ITACA-UPV, 2008

catch (IOException ioe) { ... throw new FileNotFoundException(); }

58

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

59

Arrays
Los arrays son secuencias de datos del mismo tipo
tipoDatos[] nombreArray; [] ; tipoDatos[] nombreArray = new tipoDatos[nmeroDatos]; tipoDatos[] nombreArray = new tipoDatos[nmeroDatos]{valores};

Juan Carlos Ruiz, ITACA-UPV, 2008

Los elementos se acceden por medio de ndices enteros


Entero ndice 0

Entero ndice 4

60

Creacin de arrays
Arrays unidimensionales
int[] tabla = new int[]{1,2,3}; int[] tabla = {1,2,3};

tabla

1 1 3

2 2 4

Arrays dentados

dentado

int[][] dentado = new int[][]{new int[]{1,2},new int[]{3,4,5}}; int[][] dentado = {{1,2},{3,4,5}};

Arrays multidimensionales
Juan Carlos Ruiz, ITACA-UPV, 2008

int[,] matriz = new int[,]{new int[]{1,2,3},new int[]{4,5,6}}; int[,] matriz = {{1,2,3},{4,5,6}};

matriz

1 4

2 5

3 6

61

Acceder a elementos del array


Se proporciona un entero por cada dimensin del array
El primer elemento se numera desde cero
tabla[0] 1 dentado[1][2]
Juan Carlos Ruiz, ITACA-UPV, 2008

3 1 3 2 4 5 1 4 2 5 3 6

matriz[0,1]

62

Lmites del array


Se comprueban siempre los accesos fuera de los lmites del array
Se lanza una excepcin IndexOutOfBounds Uso de la propiedad Length y del mtodo

GetLength

tabla.Rank; tabla.GetLength(0); tabla.Length;


Juan Carlos Ruiz, ITACA-UPV, 2008

// 1 // 3 // 3 // // // // 2 2 3 6

matriz.Rank; matriz.GetLength(0); matriz.GetLength(1); matriz.Length;

1 4

2 5

3 6

63

Copiar variables de tipo array


Al copiar una variable de tipo array se copia nicamente la variable, no la instancia
int[] tabla = {1,2,3}; int[] copia = tabla; copia[0]++; Console.WriteLine({0}, tabla[0]); Console.WriteLine({0}, copia[0]); // 2 // 2

tabla copia

Juan Carlos Ruiz, ITACA-UPV, 2008

64

Mtodos de arrays
Todos los arrays soportan la clase System.Array
Sort ordena los elementos del array
int[] datos = {4,6,3,8,9,3}; Array.Sort(datos); int[] datos = {4,6,3,8,9,3}; Array.Clear(datos, 0, datos.Length);
Juan Carlos Ruiz, ITACA-UPV, 2008

// Desordenado // Ordenado

Clear pone un conjunto de elementos a cero o null


//{0,0,0,0,0,0}

Clone crea una copia de la instancia del array


int[] datos = {4,6,3,8,9,3}; int[] clon = (int[]) datos.Clone(); //{4,6,3,8,9,3}

65

Mtodos de arrays
Todos los arrays soportan la clase System.Array
GetLength devuelve la longitud de una dimensin
int[,] datos = {{4,6,3},{8,9,3}; int dim0 = datos.GetLength(0); // 2 int dim1 = datos.GetLength(1); // 3

IndexOf devuelve el ndice de la primera aparicin de un valor


Juan Carlos Ruiz, ITACA-UPV, 2008

int[] datos = {4,6,3,8,9,3}; int indice = Array.IndexOf(datos, 9); // 4

Paso de arrays como parmetros


Se pasa una copia de la variable del array, no de su instancia
Los cambios efectuados afectarn a la instancia del array original public void MasUno(int[] vector) { foreach(int i in vector) { vector[i]++; } } public static void Main() { int[] tabla = {0,1,2,3}; MasUno(tabla); foreach(int i in vector) { Console.WriteLine(tabla[i]); // {1,2,3,4} } }

66

Juan Carlos Ruiz, ITACA-UPV, 2008

67

Instruccin foreach
La instruccin foreach puede ser muy til para recorrer los elementos de un array
public static void Main(string[] args) { foreach(string s in args) Console.WriteLine(s); }
Juan Carlos Ruiz, ITACA-UPV, 2008

68

ndice
Aspectos bsicos Variables, tipos y operadores Instrucciones Excepciones Arrays
Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos

69

Mtodos
Aplicaciones divididas en pequeos pedazos de cdigo son ms fciles de entender, disear, desarrollar, depurar y mantener Un mtodo es un conjunto de instrucciones agrupadas bajo un nombre determinado
tipoRetorno nombreMtodo(parmetros) { cuerpo }

Juan Carlos Ruiz, ITACA-UPV, 2008

70

Llamada a mtodos
Puede llamarse a un mtodo dentro de la misma clase
nombreMtodo(parmetros);

Puede llamarse a un mtodo de otra clase si ha sido declarado public


nombreClase.nombreMtodo(parmetros);

Pueden utilizarse llamadas anidadas


Juan Carlos Ruiz, ITACA-UPV, 2008

Mtodos que llaman a mtodos que llaman a mtodos

71

Llamada a mtodos
using System; class Hola { public static void SaludarEstatico() { Console.WriteLine(Hola Estatico); } public void SaludarDinamico() { Console.WriteLine(Hola Dinamico); } public static void Main() { SaludarEstatico(); Hola hola = new Hola(); hola.SaludarDinamico(); } }

Juan Carlos Ruiz, ITACA-UPV, 2008

72

Instruccin return
La instruccin return vuelve inmediatamente al llamador del mtodo Si el tipo de dato que devuelve es distinto de void, puede utilizarse para devolver un valor
public void Saludar() { bool saludoCompleto = false; Console.WriteLine(Hola); if (!saludoCompleto) return; Console.WriteLine( Mundo); }

Juan Carlos Ruiz, ITACA-UPV, 2008

73

Valores de retorno
El mtodo debe estar declarado con un tipo no void
En este caso DEBE devolver un valor
public int DosMasDos() { int a = 2, b = 2; return (a + b); } public static void Main() { int x = DosMasDos(); Console.WriteLine(2 + 2 = {0}, x); }

Juan Carlos Ruiz, ITACA-UPV, 2008

Declaracin y llamada con parmetros


Declaracin
Se debe definir el tipo y nombre para cada uno de los parmetros

74

Llamada
Se debe proporcionar un valor del tipo adecuado para cada uno de los parmetros

Hay 3 mecanismos para el paso de parmetros


Juan Carlos Ruiz, ITACA-UPV, 2008

Por valor (o parmetros de entrada) Por referencia (o parmetros de entrada y salida) Por salida (o parmetros de salida)

75

Paso por valor


Se pasa una copia del valor del parmetro La variable se puede modificar en el interior del mtodo No tiene ningn efecto en su valor fuera del mtodo El parmetro debe ser del mismo tipo o tipo compatible
public int Suma(int x, int y) { return (x + y); } public static void Main() { int i = 3, j = 5; int k = Suma(i, j); Console.WriteLine({0} + {1} = {2}, i, j, k); }

Juan Carlos Ruiz, ITACA-UPV, 2008

76

Paso por referencia


Una referencia es una posicin de memoria Se utiliza la palabra reservada ref en la definicin del mtodo y en la llamada Deben coincidir el tipo y el valor de la variable Los cambios que se efecten en el mtodo afectan al llamador
public void SumaUno(ref int x) { x++; } public static void Main() { int i = 3; SumaUno(ref i); Console.WriteLine(i++ = {0}, i); }

Juan Carlos Ruiz, ITACA-UPV, 2008

77

Parmetros de salida
Son anlogos a los parmetros por referencia
Transfieren datos fuera del mtodo en lugar de dentro Se utiliza la palabra clave out en la declaracin del mtodo y en la llamada
public void Saludo(out string s) { s = Hola Mundo; } public static void Main() { string i; Saludo(out i); Console.WriteLine(Saludo = {0}, i); }

Juan Carlos Ruiz, ITACA-UPV, 2008

Listas de parmetros de longitud variable


Se utiliza la palabra clave params Se declara como un array al final de la lista de parmetros Siempre se pasa por valor
public int SumaLista(params int[] lista) { int i = 0; foreach(int x in lista) i += x; return(i); } public static void Main() { int i = SumaLista(1, 5, 22, 12); Console.WriteLine(Suma = {0}, i); }

78

Juan Carlos Ruiz, ITACA-UPV, 2008

79

Mtodos recursivos
Un mtodo puede llamarse a s mismo
public int Factorial(int x) { if (x <= 1) return(1); else return(x * Factorial(x 1)); } public static void Main() { int i = Factorial(5); Console.WriteLine(Factorial = {0},i); }

Juan Carlos Ruiz, ITACA-UPV, 2008

80

Mtodos sobrecargados
Los mtodos sobrecargados son aquellos que, dentro de una misma clase, comparten el mismo nombre Se distinguen por su lista de parmetros
public int Suma(int x, int y) { return(x + y); } public int Suma(int x, int y, int z) { return(x + y + z); } public static void Main() { Console.WriteLine(Suma(Suma(3,5),Suma(1,2,3))); }

Juan Carlos Ruiz, ITACA-UPV, 2008

81

Signatura de los mtodos


La signatura de los mtodos debe ser diferente dentro de una misma clase La signatura la forman
El nombre del mtodo El tipo de los parmetros El modificador de los parmetros
Juan Carlos Ruiz, ITACA-UPV, 2008

No tienen efecto en la signatura


El nombre de los parmetros El tipo de retorno del mtodo

82

C# en 60 minutos
Practiquemos lo aprendido mediante un sencillo ejercicio

Juan Carlos Ruiz, ITACA-UPV, 2008

83

Ejercicio
Obtener el mes y da a partir del nmero del da
El da 40 es el 9 de Febrero
using System; class QueDiaEs{ public static void Main() { Console.Write("Introduce un nmero de da entre 1 y 365: "); int dato = Convert.ToInt32(Console.ReadLine()); int numeroDia = dato; int numeroMes = 0; string nombreMes; // // TODO: Aadir el cdigo aqu // Console.WriteLine("El da {0} es el {1} de {2}", dato, numeroDia, nombreMes); }

Juan Carlos Ruiz, ITACA-UPV, 2008

83

84

Ejercicio
Obtener el mes y da a partir del nmero del da
if (numeroDia > 31) { //No es Enero numeroDia-= 31; numeroMes++; if (numeroDia > 28) { //No es Febrero numeroDia-=28; numeroMes++; ... } }

Juan Carlos Ruiz, ITACA-UPV, 2008

85

Ejercicio
Obtener el mes y da a partir del nmero del da
switch(numeroMes) case 0: nombreMes = break; case 1: nombreMes = break; ... default: nombreMes = break; } { Enero;

Febrero;

Juan Carlos Ruiz, ITACA-UPV, 2008

NO EXISTE;

86

Ejercicio
Obtener el mes y da a partir del nmero del da
Nmero 32 60 91 186 304 309 327 359 Da y mes 1 de Febrero 1 de Marzo 1 de Abril 5 de Julio 31 de Octubre 5 de Noviembre 23 de Noviembre 25 de Diciembre

Juan Carlos Ruiz, ITACA-UPV, 2008

87

Ejercicio
Calcular el nombre del mes con una enumeracin
Eliminar la instruccin switch y crear la enumeracin

Juan Carlos Ruiz, ITACA-UPV, 2008

enumMes { Enero, Febrero, ..., Diciembre}; Mes mes = (Mes) numeroMes;

88

Ejercicio
Cambiar los if por un foreach
Eliminar las instrucciones if y crear la enumeracin
int[] DiasMes = new int[]{31, 28, 31, 30, ..., 31}; foreach(int dias in DiasMes) { if (numeroDia> dias) { numeroDia -= dias; numeroMes++; } else { break; } }

Juan Carlos Ruiz, ITACA-UPV, 2008

89

Ejercicio
Validar el nmero del da
Comprobar si el nmero del da est entre 1 y 365 Si no, lanzar una excepcin del tipo ArgumentOutOfRangeException
try { ... if ((numeroDia < 1) || (numeroDia > 365)) { throw new ArgumentOutOfRangeException(Da invlido); } } catch (Exception e) { Console.WriteLine(e); }

Juan Carlos Ruiz, ITACA-UPV, 2008

90

Ejercicio
Gestionar aos bisiestos
Solicitar el nmero de ao Determinar si es bisiesto
Divisible por 4 No es divisible por 100 o s es divisible por 400
Juan Carlos Ruiz, ITACA-UPV, 2008

Ao bisiesto Ao no bisiesto 1996 1999 2000 1900 2004 2001


90

91

Ejercicio
Gestionar aos bisiestos
Validar el da del ao dependiendo de si es bisiesto (366) Calcular correctamente el da y mes para aos bisiestos
int[] DiasMesBisiesto = new int[]{31, 29, 31, 30, ..., 31}; if (aoBisiesto) { foreach(int dias in DiasMesBisiesto) { if (numeroDia > dias) { numeroDia-= dias; numeroMes++; } else { break; } } }

Juan Carlos Ruiz, ITACA-UPV, 2008

92

Ejercicio
Gestionar aos bisiestos
Ao Nmero Da y mes 1999 32 1 de Febrero 2000 32 1 de Febrero 1999 60 1 de Marzo 2000 60 20 de Febrero 1999 91 1 de Abril 2000 91 31 de Mazo 1999 186 5 de Julio 2000 186 4 de Julio Ao Nmero Da y mes 1999 304 31 de Octubre 2000 304 30 de Octubre 1999 309 5 de Noviembre 2000 309 4 de Noviembre 1999 327 23 de Noviembre 2000 327 22 de Noviembre 1999 359 25 de Diciembre 2000 359 24 de Diciembre

Juan Carlos Ruiz, ITACA-UPV, 2008

También podría gustarte