Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 4. Introducción A C#
Tema 4. Introducción A C#
Tema 4. Introduccin a C#
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#
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
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); } }
Hola Mundo!
Compilacin
Smbolo de sistema de Visual Studio .NET
csc HolaMundoWindows.cs
Ejecucin
doble-click
Hola Mundo!
Compilacin
Smbolo de sistema de Visual Studio .NET
csc /target:winexe HolaMundoWindows.cs
Ejecucin
doble-click
Hola Mundo!
ILDASM
Abrir el fichero HolaMundoWindows.exe
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)
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();
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
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
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
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
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
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
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
ulong
unchecked
virtual void
volatile while
21
Declaracin de variables
Declaracin
tipoVariable nombreVariable; int a; int x, y, z;
22
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
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
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
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 + * / % +
unchecked
devuelve el resultado truncado
checked(expresinAritmtica) unchecked(expresinAritmtica)
29
Operadores
Operaciones lgicas
Evaluacin perezosa
Operacin Igualdad Desigualdad Mayor que Menor que Mayor o igual que Menor o igual que
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;
32
Operadores
Operaciones con cadenas
Concatenacin de cadenas (+)
string holaMundo1 = Hola + Mundo; string holaMundo2 = Hola Mund + o;
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
34
Operadores
Operaciones de obtencin de informacin sobre tipos
Objeto System.Type con informacin del tipo
typeof(nombreTipo)
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
Aplicable slo a tipos referencia con conversiones predefinidas en el lenguaje Devuelve null en caso de conversin invlida
36
37
38
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
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);
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 }
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
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
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
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]); } }
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;
49
Instrucciones de salto
Instruccin goto
Pasa a ejecutar la instruccin etiquetada en el
goto
goto etiqueta;
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
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
53
Excepciones
Ejemplo de excepciones predefinidas
Excepcin ArgumentException DivideByZeroException Divisin por cero Causa Argumento no vlido
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); }
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
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; }
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};
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
Arrays multidimensionales
Juan Carlos Ruiz, ITACA-UPV, 2008
matriz
1 4
2 5
3 6
61
3 1 3 2 4 5 1 4 2 5 3 6
matriz[0,1]
62
GetLength
// 1 // 3 // 3 // // // // 2 2 3 6
1 4
2 5
3 6
63
tabla copia
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
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
66
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 }
70
Llamada a mtodos
Puede llamarse a un mtodo dentro de la misma clase
nombreMtodo(parmetros);
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(); } }
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); }
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); }
74
Llamada
Se debe proporcionar un valor del tipo adecuado para cada uno de los parmetros
Por valor (o parmetros de entrada) Por referencia (o parmetros de entrada y salida) Por salida (o parmetros de salida)
75
76
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); }
78
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); }
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))); }
81
82
C# en 60 minutos
Practiquemos lo aprendido mediante un sencillo ejercicio
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); }
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++; ... } }
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;
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
87
Ejercicio
Calcular el nombre del mes con una enumeracin
Eliminar la instruccin switch y crear la enumeracin
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; } }
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); }
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
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; } } }
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