1

Tema 4. Introducción a C#

© Juan Carlos Ruiz, ITACA-UPV, 2008

Formación específica, cursos verano 2008 ETS de Informática Aplicada Universidad Politécnica de Valencia

2

Objetivos
Describir la estructura básica de un programa C# Describir los aspectos básicos del lenguaje de programación C# Utilizar el Visual Studio .NET para el desarrollo, depuración y ejecución de aplicaciones C#

© Juan Carlos Ruiz, ITACA-UPV, 2008

3

Índice
Aspectos básicos Variables, tipos y operadores Instrucciones Excepciones Arrays
© Juan Carlos Ruiz, ITACA-UPV, 2008

Métodos

4 Índice Aspectos básicos Variables. tipos y operadores Instrucciones Excepciones Arrays © Juan Carlos Ruiz. 2008 Métodos . ITACA-UPV.

ITACA-UPV.5 Características de C# Sencillez Modernidad Orientación a objetos Orientación a componentes Gestión automática de memoria Seguridad de tipos Instrucciones seguras Sistema de tipos unificado Extensibilidad de tipos básicos Extensibilidad de operadores Extensibilidad de modificadores Versionable Eficiente Compatible © Juan Carlos Ruiz. 2008 .

class HolaMundoWindows { public static void Main() { Form holaForm = new Form(). holaForm. using System.Forms.Run(holaForm). Application.6 Mi primer programa C# ¡Hola Mundo! using System. ITACA-UPV.Windows. 2008 .Text = "¡Hola Mundo!". } } © Juan Carlos Ruiz.

2008 doble-click .NET csc HolaMundoWindows.7 ¡Hola Mundo! Compilación Símbolo de sistema de Visual Studio .cs Ejecución © Juan Carlos Ruiz. ITACA-UPV.

NET csc /target:winexe HolaMundoWindows. 2008 doble-click .cs Ejecución © Juan Carlos Ruiz.8 ¡Hola Mundo! Compilación Símbolo de sistema de Visual Studio . ITACA-UPV.

9 ¡Hola Mundo! ILDASM Abrir el fichero HolaMundoWindows. 2008 . ITACA-UPV.exe © Juan Carlos Ruiz.

. ITACA-UPV.. 2008 Una clase está contenida en un único fichero Un fichero puede contener múltiples clases .10 La clase Toda aplicación C# es un conjunto de clases. estructuras y tipos de datos Una clase es un conjunto de propiedades y métodos Sintaxis class nombre { . } © Juan Carlos Ruiz.

2008 . ITACA-UPV.11 El método Main Es el punto de entrada de la aplicación public public public public static static static static void Main() int Main() void Main(string[] args) int Main(string[] args) © Juan Carlos Ruiz.

Forms.12 Espacios de nombres Existe un gran número de clases organizadas por espacios de nombres Hacer referencia a una clase por su espacio de nombres System..Form().Forms. .Windows. ITACA-UPV..Form holaForm = new System. Utilizando la directiva using © Juan Carlos Ruiz.Forms. Form holaForm = new Form().Windows. . 2008 using System.Windows.

2008 Espacios de nombres 13 .© Juan Carlos Ruiz. ITACA-UPV.

ITACA-UPV.14 Comentarios Proporcionan documentación adecuada para determinadas secciones de código Comentarios de una línea // Esto es un comentario de una sola línea Comentarios de varias líneas /* Esto es un comentario que se extiende © Juan Carlos Ruiz. 2008 a lo largo de varias líneas */ .

2008 Métodos . ITACA-UPV.15 Índice Aspectos básicos Variables. tipos y operadores Instrucciones Excepciones Arrays © Juan Carlos Ruiz.

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 demás Cada una dispone de su propia copia de los datos Las operaciones realizadas sobre una no afectan a las demás . ITACA-UPV.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.

17 Tipos valor Todos derivan de System.ValueType Tipos predefinidos o tipos básicos o tipos simples Tipos definidos por el usuario struct enum © Juan Carlos Ruiz. 2008 Todos almacenan directamente sus datos y no pueden ser null (excepto string y object) Los tipos predefinidos pueden contener un valor literal . ITACA-UPV.

127] [0.String System.Int64 System.0 × 10−324. 32767] [0. 7.Object . ‘\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 dígitos de precisión Reales con 15-16 dígitos de precisión Reales con 28-29 dígitos de precisión Valores lógicos Caracteres Unicode Cadenas de caracteres Cualquier objeto System.Decimal System.9 × 1028] true. 18446744073709551615] [-1.Byte System.4 × 1038] [-5. 65535] [-2147483648.7 × 10308] [-1.Int16 System. ITACA-UPV. 3.Single System.Tipos predefinidos/básicos/simples Se identifican por palabras reservadas que son alias de tipos struct predefinidos Tipo System.UInt16 System. 2008 18 Descripción Bits 8 8 16 16 32 32 64 64 32 64 128 32 16 Variable Variable Rango de valores [-128.5 × 10−45. 2147483647] [0. 1.Char System.SByte System.UInt64 © Juan Carlos Ruiz. 9223372036854775807] [0.Boolean System.Double System. 255] [-32768. 4294967295] [-9223372036854775808.Int32 System.UInt32 System. false [‘\u0000’.0 × 10−28.

2008 . ITACA-UPV.19 Identificadores Nombre con el que se identifica un elemento del código Reglas Deben comenzar por carácter alfanumérico (excepto dígitos) o underscore El resto de caracteres pueden ser caracteres alfanuméricos o underscores No utilizar palabras reservadas C3PO Älíêñ 2horas C# a!b _hola_ AºB __OK © 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 .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.

int a. 2008 .21 Declaración de variables Declaración tipoVariable nombreVariable. y. int x. © Juan Carlos Ruiz. ITACA-UPV. z.

2008 . int a = 20. 22 © Juan Carlos Ruiz.Asignación de valores a variables No es posible utilizar variables sin inicializar Asignación de valores a variables ya declaradas nombreVariable = valor. int x. x = 10. ITACA-UPV.

ITACA-UPV.23 Literales Los literales son la representación explícita de los valores que puede adoptar los tipos básicos de datos Literales enteros Decimal (0-9) Hexadecimal (0-9. a-f. 2008 . A-F) con prefijo (0x) Operadores positivo (+) y negativo (-) 0 -12 +34 0x5A6 -0xB78 © Juan Carlos Ruiz.

0 © Juan Carlos Ruiz. 2008 -12.24 Literales Literales reales Como los enteros decimales Parte entera y real separada por punto decimal (.5 +34. E) 0.88E5 Literales lógicos true false . ITACA-UPV. exponente (e.3e-2 7.8 56.) Notación científica.

ITACA-UPV. 2008 Código Unicode \u0027 \u0022 \u0000 \u0007 \u0008 \u000C \u000A \u000D \u0009 \u000B \u005C Código de escape \’ \” \0 \a \b \f \n \r \t \v \\ Salto de página Nueva línea Retorno de carro Tabulación horizontal Tabulación vertical Barra invertida .25 Literales Literales de carácter Cualquier carácter entre comillas simples (‘x’). excepto Carácter Comilla simple Comilla doble Carácter nulo Alarma Retroceso © Juan Carlos Ruiz.

26 Literales Literales de carácter Pueden utilizarse también los códigos Unicode Formato comprimido (\x) No es necesario escribir los ceros a la izquierda Sólo válido 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 .

ITACA-UPV.27 Literales Literales de cadena Secuencia de caracteres entre comillas dobles (“x”) Cadenas planas o verbatim Preceder la cadena por (@) Los códigos de escape no se interpretan Literal de cadena © Juan Carlos Ruiz. 2008 Interpretado como … Hola Hola Mundo “Hola Mundo” Mundo Hola\tMundo “Hola\tMundo” @“Hola\tMundo” @“Hola Mundo” @“““Hola Mundo””” .

OverflowException © Juan Carlos Ruiz. ITACA-UPV.28 Operadores Un operador es un símbolo que permite realizar una operación entre operandos y devuelve un resultado Operación Suma Operadores aritméticos Detección de desbordamiento checked lanza System. 2008 Operador + * / % + Resta Multiplicación División Módulo Menos unario Más unario unchecked devuelve el resultado truncado checked(expresiónAritmética) unchecked(expresiónAritmética) .

ITACA-UPV.29 Operadores Operaciones lógicas Evaluación perezosa Operación Operador and or not xor && y & || y | ! ^ Operaciones relacionales Operaciones de manipulación de bits Operación and or © Juan Carlos Ruiz. 2008 Operador & | ^ << >> Operación Igualdad Desigualdad Mayor que Menor que Mayor o igual que Menor o igual que Operador == != > < >= <= xor Desplazamiento a izquierda Desplazamiento a derecha .

-=. ^=. devuelve el valor asignado int distancia = 0. /=.30 Operadores Operaciones de asignación (=) Además de realizar la asignación. <<=) distancia += 10. >>=. %=. ITACA-UPV. distancia = distancia + 10. *=. 2008 (+=. &=. |=. Asignación compuesta © Juan Carlos Ruiz. .

int a = cuenta++. ITACA-UPV. // a = 10. cuenta = 12. cuenta = 11. // b = 12. cuenta++. cuenta += 1. Existe en dos formas int cuenta = 10.31 Operadores Operaciones de asignación Incremento (++) y decremento(--) Incrementar en 1 es muy común cuenta = cuenta + 1. 2008 . int b = ++cuenta. © Juan Carlos Ruiz.

Operaciones de acceso a tablas © Juan Carlos Ruiz.32 Operadores Operaciones con cadenas Concatenación de cadenas (+) string holaMundo1 = “Hola” + “ Mundo”. 2008 tabla[posiciónElemento] . ITACA-UPV. string holaMundo2 = “Hola Mund” + ‘o’.

© Juan Carlos Ruiz. 2008 Operaciones de acceso a objetos objeto. ITACA-UPV. sino devuelve el resultado de evaluar expresión2 int cociente=(divisor>0)?(dividendo/divisor):0.33 Operadores Operación condicional condición?expresión1:expresión2 Si condición es cierta devuelve el resultado de evaluar expresión1.miembro .

ITACA-UPV.34 Operadores Operaciones de obtención de información sobre tipos Objeto System.Type con información del tipo typeof(nombreTipo) Determinar si una expresión es de un tipo determinado expresión is nombreTipo © Juan Carlos Ruiz. 2008 Número de bytes que ocupa un objeto de ese tipo en memoria (código inseguro) sizeof(nombreTipo) .

ITACA-UPV.35 Operadores Operaciones de conversión entre tipos (nombreTipo) expresión Devuelve System. 2008 Aplicable sólo a tipos referencia con conversiones predefinidas en el lenguaje Devuelve null en caso de conversión inválida .InvalidCastException en caso de conversión inválida expresión as tipoDestino © Juan Carlos Ruiz.

Tipos definidos por el usuario: Enumeración Estructura que define los valores literales que pueden tomar sus objetos Soluciona los problemas de los números mágicos enum nombreEnumeración:nombreTipo { literales © Juan Carlos Ruiz. 2008 36 } El tipo por defecto de los literales es int . ITACA-UPV.

Tipos definidos por el usuario: Enumeración enum Color {Rojo. Ahorros. 2008 . PlanJubiliacion } 37 © Juan Carlos Ruiz. Verde. Azul} enum TipoCuenta { Corriente. ITACA-UPV. Vivienda.

Tipos definidos por el usuario: Estructura Tipo especial de clase que representa objetos ligeros Todos los tipos básicos son estructuras Excepto string y object struct Alumno { string Nombre. int numeroExpediente.Nombre = “John Doe”. } Alumno nuevoAlumno. 38 © Juan Carlos Ruiz.numeroExpediente = 123456. 2008 . ITACA-UPV. nuevoAlumno. nuevoAlumno.

2008 Métodos .39 Índice Aspectos básicos Variables. tipos y operadores Instrucciones Excepciones Arrays © Juan Carlos Ruiz. ITACA-UPV.

} . } A = 1. } } { { int A. ITACA-UPV. } { int A.40 Instrucciones Una instrucción es cualquier acción que se pueda realizar en el cuerpo de un método Las instrucciones se agrupan en bloques { listaInstrucciones } { © Juan Carlos Ruiz. 2008 int A. { int A. } { int A.

ITACA-UPV. break y continue) © Juan Carlos Ruiz. for y foreach) Permiten ejecutar repetidamente un bloque de instrucciones si se cumple una determinada condición De salto (goto. do. 2008 Permiten variar el orden normal en el que se ejecutan las instrucciones .41 Tipos de instrucciones Condicionales o de selección (if y switch) Permiten ejecutar bloques de instrucciones sólo si se cumple una determinada condición Iterativas (while.

WriteLine(“Color rojo”). else Console.Picas)) Console.42 Instrucciones condicionales Instrucción if Permite ejecutar ciertas instrucciones si se da determinada condición if condición instruccionesIf else instruccionesElse if ((carta = Tipo.WriteLine(“Color negro”).Treboles) || (carta = Tipo. 2008 . ITACA-UPV. © Juan Carlos Ruiz.

Corazones: case Tipo. break.43 Instrucciones condicionales Instrucción switch Permite ejecutar unos bloques de instrucción u otros atendiendo a determinada condición switch(expresión) { case valor1: bloque1 siguienteAcción case valor2: bloque2 siguienteAcción . © Juan Carlos Ruiz. break.Diamantes: Console. case Tipo.Treboles: case Tipo. default: Console.WriteLine(“Color rojo”)...Picas: Console. 2008 switch(carta) { case Tipo. } . goto default. break. break.WriteLine(“Color negro”). ITACA-UPV. default: bloqueDefault siguienteAcción } siguienteAcción puede ser: goto case valorI.WriteLine(“ERROR”).

44 Instrucciones iterativas Instrucción while Permite ejecutar un bloque de instrucciones mientras se de una determinada condición while(condición) instrucciones int i = 0. while(i < 10) { Console. i++. ITACA-UPV. } // 0 1 2 3 4 5 6 7 8 9 © Juan Carlos Ruiz. 2008 .WriteLine(i).

ITACA-UPV. int i = 0. do { Console. i++.WriteLine(i). 2008 .45 Instrucciones iterativas Instrucción do…while Variante de while que evalúa la condición al final del bucle Las instrucciones se ejecutan por lo menos una vez do instrucciones while (condición). // 0 1 2 3 4 5 6 7 8 9 © Juan Carlos Ruiz. } while(i < 10).

46

Instrucciones iterativas
Instrucción for
Variante de while que permite reducir el código necesario para los bucles más utilizados
for(inicialización;condición;modificación) instrucciones for(int i = 0; i < 10; i++) { Console.WriteLine(i); } // 0 1 2 3 4 5 6 7 8 9

inicialización y modificación 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
Instrucción foreach
Variante de for para el tratamiento de todos los elementos de una colección
foreach(tipoElemento elemento in colección) 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
Instrucción break
Se utiliza en bloques de instrucciones asociados a instrucciones iterativas o a la instrucción switch Termina la ejecución del bloque y continúa ejecutando la instrucción siguiente al mismo
break;

Instrucción continue
Se utiliza en bloques de instrucciones asociados a instrucciones iterativas Reevalúa la condición del bucle sin ejecutar el resto de instrucciones del mismo
continue;

© Juan Carlos Ruiz, ITACA-UPV, 2008

© Juan Carlos Ruiz. ITACA-UPV.49 Instrucciones de salto Instrucción goto Pasa a ejecutar la instrucción etiquetada en el goto goto etiqueta. 2008 Sólo se pueden etiquetar instrucciones No se pueden etiquetar instrucciones en bloques anidados ni en métodos diferentes al del goto Evitar su uso si es posible .

ITACA-UPV.50 Índice Aspectos básicos Variables. 2008 Métodos . tipos y operadores Instrucciones Excepciones Arrays © Juan Carlos Ruiz.

51 Excepciones Preparan los programas para lo inesperado Tradicionalmente. ITACA-UPV. 2008 . los métodos devuelven códigos informativos El código de la lógica del programa y del tratamiento del error están mezclados Todos los códigos de error son parecidos Códigos de error no significativos por sí mismos Los códigos de error se definen a nivel de método Los códigos de error son muy fáciles de ignorar © Juan Carlos Ruiz.

Exception Proporcionan Claridad en el código generado © Juan Carlos Ruiz. ITACA-UPV.52 Excepciones Objetos que se generan en tiempo de ejecución cuando se produce algún error Derivan de la clase System. 2008 Información acerca del error ocurrido Tratamiento del error asegurado .

2008 Desbordamiento Falta de memoria al crear un nuevo objeto Desbordamiento de la pila OutOfMemoryException StackOverflowException .53 Excepciones Ejemplo de excepciones predefinidas Excepción ArgumentException DivideByZeroException División por cero Causa Argumento no válido IndexOutOfRangeException Índice de acceso a un elemento fuera del rango permitido OverflowException © Juan Carlos Ruiz. ITACA-UPV.

54 Captura de excepciones Instrucción try…catch Separa la lógica del programa del tratamiento del error try try { Console. } © Juan Carlos Ruiz. int i = Int32. Console.Write(“Divisor: ”). } catch(OverflowException oe) { Console. finally instruccionesFinally . int k = i/j. int j = Int32.Parse(Console..WriteLine(dbze).Write(“Dividendo: ”).WriteLine(oe). 2008 instrucciones catch(excepción1) tratamiento1 catch(excepción2) tratamiento2 .ReadLine()). } catch(DivideByZeroException dbze) { Console.ReadLine()). ITACA-UPV.Parse(Console..

WriteLine(“ERROR EN LOS DATOS INTRODUCIDOS”).Parse(Console.Write(“Introduce el divisor:”).ReadLine()).Write(“Introduce el dividendo: ”). Console. ITACA-UPV. int j = Int32.55 Captura de excepciones Bloque catch general Puede capturar cualquier excepción independientemente de su clase No proporciona información acerca del error try { Console.Parse(Console. © Juan Carlos Ruiz. int k = i/j. 2008 } catch { Console.ReadLine()). int i = Int32. } .

Parse(Console. 2008 Console.Write(“Introduce un número del 1 al 10: ”).ReadLine()). int i = Int32. } . ITACA-UPV. Ejemplo © Juan Carlos Ruiz. if ((i < 0) || (i > 10)) { throw new NumeroNoValidoException().56 Lanzamiento de excepciones Los programadores pueden lanzar las excepciones del sistema o las suyas propias throw objetoExcepciónALanzar.

. } También es posible lanzar una excepción de un tipo distinto © Juan Carlos Ruiz.. } . throw caught..57 Lanzamiento de excepciones Desde un bloque catch es posible relanzar la excepción que ha sido capturada catch { . ITACA-UPV... 2008 catch (IOException ioe) { .. throw. throw new FileNotFoundException(). } catch { .

2008 Métodos . tipos y operadores Instrucciones Excepciones Arrays © Juan Carlos Ruiz. ITACA-UPV.58 Índice Aspectos básicos Variables.

59 Arrays Los arrays son secuencias de datos del mismo tipo tipoDatos[] nombreArray. © Juan Carlos Ruiz. 2008 Los elementos se acceden por medio de índices enteros Entero índice 0 Entero índice 4 . tipoDatos[] nombreArray = new tipoDatos[númeroDatos]{valores}. ITACA-UPV. tipoDatos[] nombreArray = new tipoDatos[númeroDatos].

3}.2.5}}.2}. tabla 1 1 3 2 2 4 3 Arrays dentados dentado 5 int[][] dentado = new int[][]{new int[]{1.4.5.new int[]{3.{4.3}. int[][] dentado = {{1. ITACA-UPV.2. Arrays multidimensionales © Juan Carlos Ruiz.3}. 2008 int[.4.] matriz = new int[.60 Creación de arrays Arrays unidimensionales int[] tabla = new int[]{1. int[.2.5}}.5.2}.] matriz = {{1. int[] tabla = {1.6}}.]{new int[]{1.new int[]{4. matriz 1 4 2 5 3 6 .6}}.3}.{3.2.

61 Acceder a elementos del array Se proporciona un entero por cada dimensión del array El primer elemento se numera desde cero tabla[0] 1 dentado[1][2] © Juan Carlos Ruiz. 2008 2 3 1 3 2 4 5 1 4 2 5 3 6 matriz[0.1] . ITACA-UPV.

© Juan Carlos Ruiz. tabla. tabla. matriz.Length.62 Límites del array Se comprueban siempre los accesos fuera de los límites del array Se lanza una excepción IndexOutOfBounds Uso de la propiedad Length y del método GetLength tabla. matriz.Length. matriz.GetLength(0).Rank.Rank. 1 4 2 5 3 6 .GetLength(1). ITACA-UPV. 2008 // 1 // 3 // 3 // // // // 2 2 3 6 1 2 3 matriz.GetLength(0).

2008 .63 Copiar variables de tipo array Al copiar una variable de tipo array se copia únicamente la variable. tabla[0]). Console. copia[0]).2. copia[0]++. ITACA-UPV. // 2 // 2 tabla copia 1 2 3 © Juan Carlos Ruiz. Console. no la instancia int[] tabla = {1.3}. int[] copia = tabla.WriteLine(“{0}”.WriteLine(“{0}”.

9.Clone().0. int[] clon = (int[]) datos. © Juan Carlos Ruiz.6.3} .Clear(datos.6.8.3}.3.9.8.9. ITACA-UPV. datos.3.0. 0.3}.6.Sort(datos).0} Clone – crea una copia de la instancia del array int[] datos = {4.Array Sort – ordena los elementos del array int[] datos = {4. Array.3.0.3}. //{4.6.Length).64 Métodos de arrays Todos los arrays soportan la clase System.3.8. Array. int[] datos = {4.0.8.9. 2008 // Desordenado // Ordenado Clear – pone un conjunto de elementos a cero o null //{0.

9).8. int dim0 = datos. ITACA-UPV.9.IndexOf(datos. 2008 int[] datos = {4.3}. // 2 int dim1 = datos.65 Métodos de arrays Todos los arrays soportan la clase System. int indice = Array.{8. // 3 IndexOf – devuelve el índice de la primera aparición de un valor © Juan Carlos Ruiz.6.GetLength(1).] datos = {{4.3}.GetLength(0).3. // 4 .6.9.3}.Array GetLength – devuelve la longitud de una dimensión int[.

3}. 2008 . ITACA-UPV. MasUno(tabla). no de su instancia Los cambios efectuados afectarán a la instancia del array original public void MasUno(int[] vector) { foreach(int i in vector) { vector[i]++. foreach(int i in vector) { Console.2.4} } } 66 © Juan Carlos Ruiz.WriteLine(tabla[i]).Paso de arrays como parámetros Se pasa una copia de la variable del array.2. } } public static void Main() { int[] tabla = {0.3. // {1.1.

67 Instrucción foreach La instrucción 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). ITACA-UPV. } © Juan Carlos Ruiz. 2008 .

68 Índice Aspectos básicos Variables. 2008 Métodos . ITACA-UPV. tipos y operadores Instrucciones Excepciones Arrays © Juan Carlos Ruiz.

ITACA-UPV. depurar y mantener Un método es un conjunto de instrucciones agrupadas bajo un nombre determinado tipoRetorno nombreMétodo(parámetros) { cuerpo } © Juan Carlos Ruiz.69 Métodos Aplicaciones divididas en pequeños pedazos de código son más fáciles de entender. 2008 . desarrollar. diseñar.

2008 Métodos que llaman a métodos que llaman a métodos… .70 Llamada a métodos Puede llamarse a un método dentro de la misma clase nombreMétodo(parámetros). Puede llamarse a un método de otra clase si ha sido declarado public nombreClase. ITACA-UPV. Pueden utilizarse llamadas anidadas © Juan Carlos Ruiz.nombreMétodo(parámetros).

71

Llamada a métodos
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

Instrucción return
La instrucción return vuelve inmediatamente al llamador del método 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 método 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

2008 Por valor (o parámetros de entrada) Por referencia (o parámetros de entrada y salida) Por salida (o parámetros de salida) . ITACA-UPV.Declaración y llamada con parámetros Declaración Se debe definir el tipo y nombre para cada uno de los parámetros 74 Llamada Se debe proporcionar un valor del tipo adecuado para cada uno de los parámetros Hay 3 mecanismos para el paso de parámetros © Juan Carlos Ruiz.

j = 5. i. 2008 . k). ITACA-UPV.WriteLine(“{0} + {1} = {2}”.75 Paso por valor Se pasa una copia del valor del parámetro La variable se puede modificar en el interior del método No tiene ningún efecto en su valor fuera del método El parámetro debe ser del mismo tipo o tipo compatible public int Suma(int x. } © Juan Carlos Ruiz. j). int k = Suma(i. } public static void Main() { int i = 3. j. Console. int y) { return (x + y).

ITACA-UPV. i).WriteLine(“i++ = {0}”. SumaUno(ref i).76 Paso por referencia Una referencia es una posición de memoria Se utiliza la palabra reservada ref en la definición del método y en la llamada Deben coincidir el tipo y el valor de la variable Los cambios que se efectúen en el método afectan al llamador public void SumaUno(ref int x) { x++. } © Juan Carlos Ruiz. } public static void Main() { int i = 3. 2008 . Console.

ITACA-UPV.77 Parámetros de salida Son análogos a los parámetros por referencia Transfieren datos fuera del método en lugar de dentro Se utiliza la palabra clave out en la declaración del método y en la llamada public void Saludo(out string s) { s = “Hola Mundo”. Console. } © Juan Carlos Ruiz. 2008 .WriteLine(“Saludo = {0}”. Saludo(out i). i). } public static void Main() { string i.

Listas de parámetros de longitud variable Se utiliza la palabra clave params Se declara como un array al final de la lista de parámetros Siempre se pasa por valor public int SumaLista(params int[] lista) { int i = 0. foreach(int x in lista) i += x. 22. return(i).WriteLine(“Suma = {0}”. } public static void Main() { int i = SumaLista(1. Console. 12). 2008 . ITACA-UPV. i). } 78 © Juan Carlos Ruiz. 5.

} public static void Main() { int i = Factorial(5).WriteLine(“Factorial = {0}”. ITACA-UPV.79 Métodos recursivos Un método puede llamarse a sí mismo public int Factorial(int x) { if (x <= 1) return(1). Console. } © Juan Carlos Ruiz. else return(x * Factorial(x – 1)).i). 2008 .

comparten el mismo nombre Se distinguen por su lista de parámetros public int Suma(int x.80 Métodos sobrecargados Los métodos sobrecargados son aquellos que. int z) { return(x + y + z).2. dentro de una misma clase. int y) { return(x + y).WriteLine(Suma(Suma(3. } public int Suma(int x.Suma(1.3))).5). ITACA-UPV. int y. } © Juan Carlos Ruiz. 2008 . } public static void Main() { Console.

ITACA-UPV. 2008 No tienen efecto en la signatura El nombre de los parámetros El tipo de retorno del método .81 Signatura de los métodos La signatura de los métodos debe ser diferente dentro de una misma clase La signatura la forman El nombre del método El tipo de los parámetros El modificador de los parámetros © Juan Carlos Ruiz.

ITACA-UPV. 2008 .82 C# en 60 minutos Practiquemos lo aprendido mediante un sencillo ejercicio… © Juan Carlos Ruiz.

Write("Introduce un número de día entre 1 y 365: "). string nombreMes. int numeroMes = 0.ReadLine()). dato. int numeroDia = dato.83 Ejercicio Obtener el mes y día a partir del número del día El día 40 es el 9 de Febrero using System. numeroDia. 2008 83 } . nombreMes). class QueDiaEs{ public static void Main() { Console.WriteLine("El día {0} es el {1} de {2}". int dato = Convert. } © Juan Carlos Ruiz. ITACA-UPV. // // TODO: Añadir el código aquí // Console.ToInt32(Console.

} } © Juan Carlos Ruiz. ... numeroMes++. numeroMes++. 2008 .84 Ejercicio Obtener el mes y día a partir del número del día if (numeroDia > 31) { //No es Enero numeroDia-= 31. ITACA-UPV. if (numeroDia > 28) { //No es Febrero numeroDia-=28.

© Juan Carlos Ruiz. case 1: nombreMes = break.85 Ejercicio Obtener el mes y día a partir del número del día switch(numeroMes) case 0: nombreMes = break. . 2008 “NO EXISTE”. } { “Enero”. “Febrero”. ITACA-UPV. .. default: nombreMes = break..

2008 .86 Ejercicio Obtener el mes y día a partir del número del día Número 32 60 91 186 304 309 327 359 Día 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.

Febrero.. ITACA-UPV. Diciembre}. Mes mes = (Mes) numeroMes.. .87 Ejercicio Calcular el nombre del mes con una enumeración Eliminar la instrucción switch y crear la enumeración © Juan Carlos Ruiz. 2008 enumMes { Enero.. .

28... . } else { break. } } © Juan Carlos Ruiz. 30.88 Ejercicio Cambiar los if por un foreach Eliminar las instrucciones if y crear la enumeración int[] DiasMes = new int[]{31. 2008 . foreach(int dias in DiasMes) { if (numeroDia> dias) { numeroDia -= dias.. numeroMes++. ITACA-UPV. 31}. 31.

} } catch (Exception e) { Console... 2008 . } © Juan Carlos Ruiz. if ((numeroDia < 1) || (numeroDia > 365)) { throw new ArgumentOutOfRangeException(“Día inválido”).WriteLine(e). ITACA-UPV.89 Ejercicio Validar el número del día Comprobar si el número del día está entre 1 y 365 Si no. lanzar una excepción del tipo ArgumentOutOfRangeException try { .

90 Ejercicio Gestionar años bisiestos Solicitar el número de año Determinar si es bisiesto Divisible por 4 No es divisible por 100 o sí es divisible por 400 © Juan Carlos Ruiz. ITACA-UPV. 2008 Año bisiesto Año no bisiesto 1996 1999 2000 1900 2004 2001 90 .

} } } © Juan Carlos Ruiz. 2008 . if (añoBisiesto) { foreach(int dias in DiasMesBisiesto) { if (numeroDia > dias) { numeroDia-= dias. 30. ITACA-UPV. 29. numeroMes++.. ..91 Ejercicio Gestionar años bisiestos Validar el día del año dependiendo de si es bisiesto (366) Calcular correctamente el día y mes para años bisiestos int[] DiasMesBisiesto = new int[]{31. 31}.. 31. } else { break.

2008 .92 Ejercicio Gestionar años bisiestos Año Número Día 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 Año Número Día 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.

Sign up to vote on this title
UsefulNot useful