Anda di halaman 1dari 63

18/03/13

Departamento de Lenguajes y Sistemas InformFcos

Tema 7. Plataforma .net

Primeros programas con C#


Herramientas Avanzadas para el Desarrollo de Aplicaciones

Escuela Politcnica Superior


Universidad de Alicante

Programacin en C#. Parte I: Primeros programas con C#

Objetivos
1.
2.
3.
4.
5.
6.

Introduccin a la plataforma .NET


Conocer los orgenes de C#
Crear una aplicacin de consola
Conocer la estructura bsica de un programa C#
Conocer la gesFn de excepciones
Conocer las colecciones de datos de Ilist

18/03/13

1.
2.
3.
4.
5.
6.
7.
8.
9.

Qu es .net?
Arquitectura .net
Arquitectura .net Framework
El modelo de ejecucin
Introduccin a C#
Mi primer programa con C#
Aspectos bsicos del lenguaje
Gestin de excepciones
Colecciones de datos

Qu es .Net?

18/03/13

.net es una plataforma que permite el desarrollo de


aplicaciones software y libreras.
.net contiene el compilador y las herramientas
necesarias para construir, depurar y ejecutar estas
aplicaciones.

.net es una plataforma software


Es un entorno de desarrollo independiente del
lenguaje, que permite escribir programas de forma
sencilla, e incluso permite combinar cdigo escrito
en diferentes lenguajes.
No est orientado a un Hardware/Sistema Operativo
concreto, sino a cualquier plataforma para la
que .net est desarrollado.

18/03/13

C++

C#

J#

Common Language Specification

Visual Studio .NET

Visual
Basic

Arquitectura .
Net?

.NET Framework

18/03/13

Visual Studio .NET ofrece un entorno de desarrollo


para desarrollar aplicaciones que se ejecutan sobre
el .NET Framework.
Proporciona las tecnologas fundamentales para
simplificar la creacin e implantacin de
Aplicaciones y Servicios Web
Aplicaciones basadas en Windows

Lenguajes de programacin

C++

C#

J#

Common Language Specification

Visual Studio .NET

Visual
Basic

.NET Framework

18/03/13

C#

C# ha sido diseado especficamente para la


plataforma .NET y es el primer lenguaje moderno
orientado a componentes de la familia de C y C++.
Puede incrustarse en pginas ASP.NET.
Algunas de las principales caractersticas de este
lenguaje incluyen clases, interfaces, delegados,
espacios de nombres, propiedades, indexadores,
eventos, sobrecarga de operadores, versionado,
atributos, cdigo inseguro, creacin de
documentacin en formato XML .

Visual Basic .net


C++
J#
Lenguajes de terceros

C++

C#

J#

Common Language Specification

Visual Studio .NET

Visual
Basic

.NET Framework

18/03/13

La especificacin Common Language Specification


(CLS) define los mnimos estndares que deben
satisfacer los lenguajes y desarrolladores si desean
que sus componentes y aplicaciones sean
ampliamente utilizados por otros lenguajes
compatibles con .NET.

La especificacin CLS permite a los desarrolladores


de .NET crear aplicaciones como parte de un equipo
que utiliza mltiples lenguajes con la seguridad de
que no habr problemas con la integracin de los
diferentes lenguajes.
La especificacin CLS tambin permite a los
desarrolladores de .NET heredar de clases
desarrolladas en lenguajes diferentes.

18/03/13

C++

C#

J#

Common Language Specification

Visual Studio .NET

Visual
Basic

.NET Framework

Es el motor de ejecucin
Proporciona un conjunto de servicios comunes para los
proyectos generados en .net, con independencia del
lenguaje.

18/03/13

Extensible

La jerarqua del .NET Framework no queda oculta al


desarrollador. Podemos acceder y extender clases .NET (a
menos que estn selladas) utilizando herencia. Tambin
podemos implementar herencia multilenguaje.

Fcil de usar por los desarrolladores

Extensible
Fcil de usar por los desarrolladores

En el .NET Framework, el cdigo est organizado en


espacios de nombres jerrquicos y clases. El
Framework proporciona un sistema de tipos comn,
denominado sistema de tipos unificado, que utiliza
cualquier lenguaje compatible con .NET. En el sistema
de tipos unificado, todo es un objeto.

18/03/13

Arquitectura
.net
Framework

El Common Language Run,me (CLR) es el ncleo de la


plataforma .NET. Es el motor encargado de gesFonar la
ejecucin de las aplicaciones para ella desarrolladas y a
las que ofrece numerosos servicios que simplican su
desarrollo y favorecen su abilidad y seguridad.

10

18/03/13

Common Language Run,me (CLR)


Ejecucin multiplataforma: El CLR acta como una
mquina virtual, encargndose de ejecutar las
aplicaciones diseadas para la plataforma .NET. Es decir,
cualquier plataforma para la que exista una versin del
CLR podr ejecutar cualquier aplicacin .NET.

Hasta ahora solo se han desarrollados CLR para


todas las versiones de Windows, existe la posibilidad
de desarrollar una versin para sistemas como Unix
o Linux debido a que la arquitectura del CLR es
abierta.
Proyecto Mono: http://go-mono.com

Common Language Run,me (CLR)

Integracin de lenguajes:

Desde cualquier lenguaje para el que exista un


compilador que genere cdigo para la
plataforma .NET es posible utilizar cdigo generado
para la misma usando cualquier otro lenguaje tal y
como si de cdigo escrito usando el primero se
tratase.
La integracin de lenguajes provee que es posible
escribir una clase en C# que herede de otra escrita
en Visual Basic.NET que, a su vez, herede de otra
escrita en C++ con extensiones gestionadas.

11

18/03/13

Common Language Run,me (CLR)

Ges,n de memoria:

El CLR incluye un recolector de basura que evita


que el programador tenga que tener en cuenta
cundo ha de destruir los objetos que dejen de serle
tiles.
Gracias a este recolector se evitan errores de
programacin muy comunes como:
Intentos de borrado de objetos ya borrados.
Agotamiento de memoria por olvido de eliminacin
de objetos intiles o
Solicitud de acceso a miembros de objetos ya
destruidos.

Common Language Run,me (CLR)

Seguridad de ,pos: El CLR facilita la deteccin de


errores de programacin di\ciles de localizar
comprobando que toda conversin de Fpos que se
realice durante la ejecucin de una aplicacin .NET se
haga de modo que los Fpos origen y desFno sean
compaFbles.

12

18/03/13

Common Language Run,me (CLR)

Tratamiento de excepciones: En el CLR todos los


errores que se puedan producir durante la ejecucin
de una aplicacin se propagan de igual manera:
mediante excepciones.

System

System.Security

System.Runtime.
InteropServices

System.Net

System.Text

System.Globalization

System.Reflection

System.Threading

System.Configuration

System.IO

System.Diagnostics

System.Collections

13

18/03/13

La biblioteca de clases del .NET Framework expone


caractersticas del entorno de ejecucin y proporciona en
una jerarqua de objetos otros servicios de alto nivel que
todo programador necesita. Esta jerarqua de objetos se
denomina espacio de nombres.
La biblioteca de clases del .NET Framework proporciona
numerosas y potentes caractersticas nuevas para los
desarrolladores
Por ejemplo, el espacio de nombres Collections aade
numerosas posibilidades nuevas, como clasificacin, colas,
pilas y matrices de tamao automtico.
La clase de sistema Threading tambin ofrece nuevas
posibilidades para crear verdaderas aplicaciones multi-hilo.

Espacios de nombres System

El espacio de nombres System contiene clases


fundamentales y clases base que definen tipos de
datos valor y referencia comnmente utilizados,
eventos y descriptores de eventos, interfaces,
atributos y procesamiento de excepciones.

14

18/03/13

Espacio de nombres

Utilidad de los tipos de datos que contiene

System

Tipos muy frecuentemente usados, como los los tipos bsicos,


tablas, excepciones, fechas, nmeros aleatorios, recolector de
basura, entrada/salida en consola, etc.

System.Collections

Colecciones de datos de uso comn como pilas, colas, listas,


diccionarios, etc.

System.Data

Manipulacin de bases de datos. Forman la denominada


arquitectura ADO.NET.

System.IO

Manipulacin de ficheros y otros flujos de datos.

System.Net

Realizacin de comunicaciones en red.

System.Reflection

Acceso a los metadatos que acompaan a los mdulos de cdigo.

System.Runtime.Remoting

Acceso a objetos remotos.

System.Security

Acceso a la poltica de seguridad en que se basa el CLR.

System.Threading

Manipulacin de hilos.

System.Web.UI.WebControls

Creacin de interfaces de usuario basadas en ventanas para


aplicaciones Web.

System.Winforms

Creacin de interfaces de usuario basadas en ventanas para


aplicaciones estndar.

System.XML

Acceso a datos en formato XML.

El modelo de
ejecucin

15

18/03/13

Cdigo
fuente

Cdigo

VB
VB

C#
C#

C++
C++

Compiler
Compilador

Compiler
Compilador

Compiler
Compilador

Assembly IL
Cdigo
de

Assembly IL
Cdigo
de
code
ensamblado
IL

Assembly IL
Cdigo
de
code
ensamblado
IL

code
gestionado ensamblado
IL

Common Language Runtime


Runtime
de lenguaje comn

Unmanaged
Componente
nocomponent
gestionado

JIT compiler
Compilador
JIT

Native code
Cdigo
nativo

Operating system services


Servicios del sistema
operativo

Los compiladores que generan cdigo para


la plataforma .NET generan cdigo escrito en
el lenguaje intermedio conocido como
Microsoft Intermediate Lenguage (MSIL)
Incluye instrucciones que permiten trabajar
directamente con objetos (crearlos,
destruirlos, inicializarlos, llamar a mtodos
virtuales, etc.), tablas y excepciones
(lanzarlas, capturarlas y tratarlas)

16

18/03/13

Programacin en C#



Introduccin a
C#

Introduccion a C#

C#
Lenguaje diseado especcamente para .NET
Diseado desde cero sin ningn condicionamiento
Microsoa lo describe como

Sencillo
Moderno
Orientado a objetos
Seguro en cuanto a Fpos
Derivado de C y C++ (y a JAVA aunque Microsoa no lo diga)

17

18/03/13

Introduccin a C# (II)

Ventajas
Integrado con modernas herramientas de
desarrollo
Fcil de integrar con Visual Basic
Tiene el alto rendimiento y permite el acceso a
memoria de bajo nivel de C++

Programacin en C#



Mi primer
programa
con C#

18

18/03/13

Ejercicio 1
} Escribir un programa en C# que muestre un mensaje en pantalla.

Demo : MiPrimerPrograma
using?
namespace?
Main dentro de una clase?
Main o main?

19

18/03/13

Demo : MiPrimerPrograma

El programa principal : Main


Al escribir Main hay que:
UFlizar una M mayscula, como en Main
Designar un Main como el punto de entrada al programa
Declarar Main como sta,c void Main

Un Main puede pertenecer a mlFple clases


En ese caso se debe especicar cual es el primer punto de
entrada

La aplicacin termina cuando Main acaba o ejecuta un return

20

18/03/13

La clase: class
Una aplicacin C# es una coleccin de clases, estructuras y
Fpos
Una clase es un conjunto de datos y mtodos
Una aplicacin C# puede incluir muchas clases
Sintaxis :

class nombre
{
...
}

Los espacios de nombres :namespace


.NET Framework ofrece muchas clases de uFlidad
Organizadas en espacios de nombres (namespace)

System es el espacio de nombres ms uFlizado


Se hace referencia a clases por su espacio de nombres

La sentencia using

System.Console.WriteLine("Hola, mundo");
using System;

Console.WriteLine("Hola, mundo");

21

18/03/13

Los espacios de nombres :using


La palabra using referencia los espacios de nombres uFlizados.
En caso de no referenciar un espacio de nombres, al uFlizar sus
mtodos se debe especicar el path completo.
La sentencia using

System.Console.WriteLine("Hola, mundo");
using System;

Console.WriteLine("Hola, mundo");

Los comentarios
Los comentarios son importantes
Una aplicacin con los comentarios adecuados permite a un desarrollador
comprender perfectamente la estructura de la aplicacin

Comentarios de una sola lnea


// Obtener el nombre del usuario



Console.WriteLine(Cmo se llama? ");
Comentarios
de varias lneas );
name
= Console.ReadLine(

/* Encontrar la mayor raz


de la ecuacin cuadrtica */
x = ();

22

18/03/13

Los comentarios (II)


p /// Comentarios que permiten generar documentacin

automFca del proyecto.

namespace ConsoleApplication11
{
/// <summary>
/// La clase 1 permite mostrar mensajes
/// </summary>
class Class1
{
/// <summary>
/// Punto de entrada principal de la aplicacin.
/// </summary>

Programacin en C#



Aspectos bsicos
del lenguaje

23

18/03/13

Programacin en C#


7.1



Sistema de Tipos
Comunes
(CTS)

CTS
} Cada variable Fene un Fpo de datos que determina los
valores que se pueden almacenar en ella.
} C# es un lenguaje de especicaciones seguras (type-safe), lo
que signica que el compilador de C# garanFza que los
valores almacenados en variables son siempre del Fpo
adecuado.
} El runFme de lenguaje comn incluye un sistema de Fpos
comunes (Common Type System, CTS) que dene un conjunto
de Fpos de datos predenidos que se pueden uFlizar para
denir variables.

24

18/03/13

CTS (II)
} Al denir una variable es necesario elegir el Fpo de datos
correcto para ella. El Fpo de datos determina los valores
permiFdos para esa variable, los cuales a su vez
determinan las operaciones que se pueden efectuar
sobre ella.
} El CTS es una parte integral del runFme de lenguaje
comn y es comparFdo por los compiladores, las
herramientas y el propio runFme.
} Es el modelo que dene las reglas que sigue el runFme a
la hora de declarar, usar y gesFonar Fpos.
} El CTS establece un marco que permite la integracin
entre lenguajes, la seguridad de Fpos y la ejecucin de
cdigo con altas prestaciones.

CTS
Tipo

El CTS admite tanto Fpos de valor como de referencia

Tipo de valor
ConFenen sus datos
directamente
Cada una Fene su propia
copia de datos
Las operaciones sobre una no
afectan a otra

Tipo de referencia
Almacenan referencias a sus
datos (conocidos como objetos)
Dos variables de referencia
pueden apuntar al mismo objeto
Las operaciones sobre una
pueden afectar a otra

25

18/03/13

CTS
Tipo

El CTS admite tanto Fpos de valor como de referencia

Tipo de valor

Predefinido

Tipo de referencia

Del usuario

Entero
Decimal
Lgico
Carcter

Entero
sbyte
short
int
long
byte
ushort
uint
ulong

SByte
Int16
Int32
Int64
Byte
UInt16
UInt32
Uint64

8 bits con signo


16 bits con signo
32 bits con signo
64 bits con signo
8 bits sin signo
16 bits sin signo
32 bits sin signo
64 bits sin signo

El tipo byte no es equivalente al char.

26

18/03/13

Decimales
float

Single

32 bits. Precisin simple (7


dgitos significativos)

double

Double

64 bits. Precisin doble (15


dgitos significativos

decimal

Decimal

Alta precisin (28 dgitos


significativos

Por defecto un nmero no entero es double


Explcitamente
34.5F (float)
34.5M (decimal)

Lgico

bool

Bool

true o false

No se pueden convertir tipos bool


a entero o viceversa.

27

18/03/13

Carcter
char

Char

Carcter Unicode
de 16 bits

Valores Unicode \u0041


Valores hexadecimales \x0041

CTS
Tipo

El CTS admite tanto Fpos de valor como de referencia

Tipo de valor

Predefinido
n

Ejemplos

Tipo de referencia

Del usuario
n

Ejemplos

int

enum

float

struct

28

18/03/13

Tipos enumerados deHinidos por el


usuario :enum
enum Colores {amarillo, azul, rojo}; Definicin
static void Main(string[] args)
{
Colores colorPantalon = Colores.amarillo;
Console.WriteLine(colorPantalon);
}

Uso

Visualizacin

amarillo

CTS
Tipo

El CTS admite tanto Fpos de valor como de referencia

Tipo de valor

Predefinido

Tipo de referencia

Del string
usuario

objeto

29

18/03/13

Tipos referencia

Object

Es un Fpo del que derivan el resto de Fpos

String

Facilita la gesFn de cadenas


Permite operaciones del Fpo

Asignacin directa
Concatenacin (+)

El tipo string
static void Main(string[] args){
string cadena= "Mi primera cadena";
Console.WriteLine(cadena);
}

string cadena = Mi primera cadena";


Mi primera cadena

string cadena = Mi primera\ncadena";


Mi primera
cadena

string cadena = @Mi primera\ncadena";


Mi primera\ncadena

30

18/03/13

El tipo string (2)


static void Main(string[] args){
string cadena= "Mi primera cadena";
Console.WriteLine(cadena);
}

string cadena = "\"Hola\"";


Hola

string cadena = Hola + 2;


Hola 2

string cadena = 2 + Hola;


2Hola

Programacin en C#


7.2



Expresiones y
Operadores

31

18/03/13

Expresiones. Operadores
Smbolos uFlizados en las expresiones

Operadores
Incremento / decremento
AritmFcos
Relacionales
Igualdad
Lgicos
Asignacin

++ --
* / % + -
< > <= >=
== !=
&& || !
= *= /= %= += -=

Ejercicio 2
} Escribir un programa en C# que lea dos nmeros por teclado.

32

18/03/13

Demo : Entrada por teclado

Definicin de variables
Salida por pantalla

Entrada por teclado y conversin de datos

Programacin en C#


7.3



Variables y
Constantes

33

18/03/13

Declaracin de variables
Se suelen declarar por Fpo de dato y nombre de variable:

int
Es pobjetoCuenta;
osible declarar mlFples variables en una declaracin:

--o--

int objetoCuenta, empleadoNmero;


int objetoCuenta,
empleadoNmero;

Declaracin de variables (II)


Pregunta. Qu ocurre si se intenta acceder a una variable no inicializada?
static void Main(string[] args)
{
int a,b;
a = b + 2;
}

!!!! El compilador C# exige que cualquier variable est inicializada antes de ser usada

34

18/03/13

Declaracin de variables (III)

C# es mucho ms seguro que


C++ Deja al programador la tarea de garanFzar que usa
variables inicializadas. (Los compiladores modernos emiten
mensajes de aviso pero permiten generar el ejecutable.
VB inicializa a 0 por defecto las variables.

Declaracin de variables (IV)


} Reglas

Usa letras, el signo de subrayado y dgitos

} Recomendaciones

Evita poner todas las letras en maysculas


Evita empezar con un signo de subrayado
Evita el uso de abreviaturas
Use PascalCasing para nombres con varias palabras

35

18/03/13

Declaracin de variables (V)


} PascalCasing
}

Consiste en marcar con maysculas las fronteras de las


palabras
} EstaEsUnaVariable
La primera letra es mascula

} CamelCasing es lo mismo pero iniciando la


palabra en minscula
}

estaEsUnaVariable

} Hay autores que recomiendan utilizar


PascalCasing variables pblicas y camelCasing
para privadas.

Declaracin de variables (VI)


p Asignar valores a variables ya declaradas:

int empleadoNumero;
empleadoNumero = 23;

p Inicializar una variable cuando se declara:


int empleadoNumero = 23;

p Tambin es posible inicializar valores de caracteres:

char inicialNombre = 'J';

36

18/03/13

mbito de las variables

El mbito de una variable coincide con su clase contenedora


El mbito de una variable naliza con la llave que cierra el bloque
o mtodo en el que la variable ha sido declarada.
Las variables pueden ser declaradas dentro de un bucle, siendo
solo visibles en el mismo.

Esto cumple el estndar ANSI de C++


Las versiones anteriores de Microsoa C++ no lo cumplan

mbito de las variables (II)

} El compilador C# exige que cualquier variable est inicializada antes


de ser usada

37

18/03/13

Constantes
Un constante es una variable que no puede cambiar su
valor
Se denen como las variables (con la palabra const)
Se deben inicializar obligatoriamente en la inicializacin

const int valor = 6378;

Constantes en C# (II)

Las constantes en C#

El valor de la constante debe ser calculado en Fempo de compilacin

(No se puede asignar a parFr de una variable)


Esto se gesFona con variables del Fpo readonly

38

18/03/13

Programacin en C#


7.4



Entrada/Salida
Por Consola

Entrada/salida de consola
Permite acceder a las secuencias estndar de entrada, salida y
error
Slo Fene senFdo para aplicaciones de consola
Entrada estndar: teclado
Salida estndar: Pantalla
Error estndar: Pantalla

Ojo: La clase Console solo se debe utilizar para aplicaciones en lnea de


comandos. Para aplicaciones windows se debe utilizar el espacio de nombre
System.Windows.Forms

39

18/03/13

Entrada/salida de consola (II)

Se basan en el uso de la clase Console


Console.Read()

Lee una cadena de texto entera

Console.Write()

Lee un ujo de entrada y lo devuelve como un int

Console.ReadLine()

Permite escribir en la pantalla

Console.WriteLine

Escribe en pantalla aadiendo carcter retorno de carro o n de lnea

Entrada/salida de consola (III)


static void Main(string[] args)
{
int a, b;
string cadena;
Console.Write ("Introduce el primer nmero: ");
cadena = Console.ReadLine();
a = int.Parse(cadena);
Console.Write("Introduce el segundo nmero: ");
cadena = Console.ReadLine();
b = int.Parse(cadena);
}

40

18/03/13

Parmetros del writeline (II)


Cadena que conFene entre llaves los parmetros que se indican a
conFnuacin separados por comas

static void Main(string[] args)


{
int a, b;
a = 3;
b = 4;
Console.WriteLine("La suma de {0} y {1} es {2} ",a,b, a+b);
Console.WriteLine("La suma de " + a + " y " + b + " es " + (a+b));

Formateo de salida

} La salida se puede formatear uFlizando el formato {n.m} donde n es


el ndice del parmetro y w el ancho de la salida

static void Main(string[] args)


{
int a, b;
a = 356;
b = 4;
Console.WriteLine(" {0,4}\n+{1,4}\n {2,4}\n",a,b, a+b);
}

41

18/03/13

Precisin

} Se pueden indicar los decimales uFlizando F y un nmero

static void Main(string[] args)


{
double a, b;
a = 356.459;
b = 4.67;
Console.WriteLine(" {0,8:F2}\n+{1,8:F2}\n {2,8:F2}\n",a,b, a+b);
}

Ejercicio 3
} Escribir un programa en C# que lea dos nmeros por teclado. Luego
deber mostrar el resultado de la suma de ambos y el cuadrado de
dicha suma.

42

18/03/13

Demo : Entrada por teclado

Conversin de datos sin prdida de informacin


Conversin de datos con prdida de informacin

Programacin en C#


7.5



Conversin de
Tipos

43

18/03/13

Conversin de tipos
Implicita

AutomFca, cuando no hay posible prdida de informacin.

int x = 2;
long l = 234;
double dob = 45.67;
dob = x;
l = x;

Conversin de tipos (II)


Explicita. Se debe indicar que se desea realizar una conversin
en la que puede haber prdida de informacin.

int x = 2;
long l = 234;
double dob = 45.67;
x = l;
l = dob;

44

18/03/13

Conversin de tipos (III)


Explicita. Correcta uFlizando casFng

int x = 2;
long l = 234;
double dob = 45.67;
x = (int) l;
l = (long) dob;

Conversin de tipos (IV)


Es correcto el siguiente programa?
static void Main(string[] args)
{
float numero;
numero = 28.67;
}

static void Main(string[] args)


{
float numero;
numero = 28.67F;
}

45

18/03/13

Demo : Entrada por teclado

Conversin de datos

Programacin en C#


7.6



Estructuras de
control

46

18/03/13

Estructuras de control

Condicional

RepeFcin

if/else
switch/case
while
do/while
for
foreach

Cambio de secuencia

return
break
conFnue

Condicional Simple
p if

if (saldo > reintegro)


Console.WriteLine("OK");

p if else if

p if else
if (saldo > reintegro)
Console.WriteLine("OK");
else
Console.WriteLine("No OK");

if (saldo > reintegro)


Console.WriteLine("OK");
else if (saldo < reintegro)
Console.WriteLine("No OK");
else
Console.WriteLine("a 0");

47

18/03/13

Condicional Simple (II)


Cmo funcionar?.
if (saldo = reintegro)
Console.WriteLine(a 0");
else if (saldo < reintegro)
Console.WriteLine("No OK");
else
Console.WriteLine(OK");

SOLUCIN
if (saldo == reintegro)
Console.WriteLine(a 0");
else if (saldo < reintegro)
Console.WriteLine("No OK");
else
Console.WriteLine(OK")

Condicional mltiple
switch (saldo)
{
case 1 : saldo *= 2;
break;
case 2 : saldo *= 3;
break;
default : saldo = 0;
break;

BREAK. Casi obligatorio.

48

18/03/13

Condicional mltiple (II)


switch (saldo) {
case 1 : saldo *= 2;

Error
case 2 : saldo *= 3;
break;
default : saldo = 0;
break;

SOLUCIN
switch (saldo) {
case 1 : saldo *= 2;
goto case 2;
case 2 : saldo *= 3;
break;
default : saldo = 0;
break;

Condicional mltiple (III)


switch (saldo) {
case 1 :

Correcto
case 2 : saldo *= 3;
break;
default : saldo = 0;
break;

49

18/03/13

Condicional mltiple (IV)


Permite utilizar etiquetas tipo string

string nombre= "Pedro";


switch (nombre)
{
case "Pedro" : Console.WriteLine("Hola Pedro");
break;
case "Juan" : Console.WriteLine("Hola Juan");
break;
}

Estructuras de repeticin
p for

for (i = 0; i <= 10 ; i++)


suma+= i;

p do

p while
while ( i <= 10)
{
suma+= i;
i++;
}

i = 0;
do
{
suma += i;
i++;
}
while (i < 10);

50

18/03/13

Estructuras de repeticin (II)


p foreach

int [ ] mivector = {1,2,3};


foreach(int algo in mivector)
Console.Write (algo);

Permite recorrer todos los elementos de un contenedor


Es necesario definir una variable del tipo de los elementos del
contendor

Cambio de secuencia:return
} Return devuelve el control a la ruFna llamante a la actual
int valor, suma;
Console.Write("Introduce un nmero : ");
valor = int.Parse(Console.ReadLine());
suma = 0;
while (valor <= 10)
{
if (valor == 3)
return;
suma += valor;
valor++;
}

Console.WriteLine("El valor es " + suma);

Qu hace el programa ???

51

18/03/13

Cambio de secuencia:break
} Break sale de la actual estructura de bucle
int valor, suma;
Console.Write("Introduce un nmero : ");
valor = int.Parse(Console.ReadLine());
suma = 0;
while (valor <= 10)
{
if (valor == 3)
break;
suma += valor;
valor++;
}

Console.WriteLine("El valor es " + suma);

Qu hace el programa ???

Cambio de secuencia:continue
} ConFnue: Obliga a ejecutar la siguiente iteracin del bucle
int valor, suma;
Console.Write("Introduce un nmero : ");
valor = int.Parse(Console.ReadLine());
suma = 0;
while (valor <= 10)
{
valor++;
if (valor == 3)
conFnue;

suma += valor;

}

Console.WriteLine("El valor es " + suma);

Qu hace el programa ???

52

18/03/13

Programacin en C#



Excepciones

Excepciones

C# ofrece facilidades para la gesFn de errores por medio del


manejo de excepciones.
Una excepcin es un objeto que se crea cuando se produce una
situacin de error especca.
Adems el objeto conFene informacin que permite resolver el
problema

53

18/03/13

Excepciones (II)

Dos clases importantes de excepciones


System.SystemExcepFon Tienen naturaleza muy
general y puedenser lanzadas por cualquier aplicacin.
System.ApplicaFonExcepFon Clase base de cualquier
clase de excepcin denida por terceros

Excepciones (III)

La programacin de excepciones se dene

try
{
// Codigo de ejecucin normal
}
Catch
{
// GesFn de errores
}
Finally
{
// Liberacin de recursos
}

54

18/03/13

Excepciones (IV)
} El bloque try conFene el cdigo que forma parte del
funcionamiento normal del programa
} El bloque catch conFene el cdigo que gesFona los diversos
errores que se puedan producir
} El bloque nally conFene el cdigo que libera los recursos. Es un
campo opcional.

Excepciones (V)

Las excepciones funcionan de la siguiente forma


1. Ejecutar instrucciones de bloque try
1. Si hay error ir a bloque catch (2)
2. Si no hay error ir a bloque nally (3)

2. Ejecutar instrucciones del bloque catch


3. Ejecutar bloque nally
4. Fin de programa

55

18/03/13

Programacin en C#



Colecciones de
datos

Colecciones de datos
En .NET Framework existen tres Fpos principales de colecciones:
Las colecciones basadas en ICollec,on
Las colecciones basadas en la interfaz IList
Las colecciones basadas en la interfaz IDic,onary

La diferencia bsica entre estos Fpos de colecciones es cmo estn


almacenados los elementos que con,enen, por ejemplo, las
colecciones de Fpo IList (y las directamente derivadas de ICollecFon)
solo almacenan un valor, mientras que las colecciones de Fpo
IDicFonary guardan un valor y una clave relacionada con dicho valor.

56

18/03/13

Colecciones basadas en Ilist


La interfaz IList se uFliza en las colecciones a las que
queremos acceder mediante un ndice, por ejemplo, los
arrays realmente est basados en esta interfaz, y la nica
forma que tenemos de acceder a los elementos de un array, (y
por extensin a los elementos de las colecciones basadas en
IList), es mediante un ndice numrico.

Colecciones basadas en Ilist


Existen tres Fpos principales de colecciones que implementan esta
interfaz:
Las de solo lectura, colecciones que no se pueden modicar. Este Fpo
de colecciones suelen basarse en la clase abstracta
ReadOnlyCollecFonBase.
Las colecciones de tamao jo, no se pueden quitar ni aadir
elementos, pero si modicarlos. Por ejemplo, las colecciones basadas
en Array son de tamao jo.
Las de tamao variable permiten cualquier Fpo de adicin,
eliminacin y modicacin. La mayora de las colecciones suelen ser
de este Fpo, es decir, nos permiten dinmicamente aadir o eliminar
elementos.

57

18/03/13

Colecciones basadas en Ilist


Existe un gran nmero de colecciones en .NET que implementan
esta interfaz, (sobre todo las colecciones basadas en controles),
entre las que podemos destacar las siguientes:
ArrayList, la coleccin "clsica" para este Fpo de interfaz.
ConFene todos los miembros habituales en este Fpo de
colecciones.
Collec/onBase, una clase abstracta para poder crear nuestras
propias colecciones basadas en IList.
StringCollec/on, una coleccin especializada que solo puede
contener valores de Fpo cadena.

Coleccin Arraylist
Esta es una clase que representa una lista de datos.
El ArrayList puede aumentar o disminuir su tamao
dinmicamente de una manera eciente. Con un array de datos
no era posible aumentar la capacidad del vector ya que dicho
parmetro es especicado en el momento de crear la instancia
del objeto.
El ArrayList a diferencia, brinda la posibilidad de aumentar o
disminuir su tamao dinmicamente segn sea necesario.

58

18/03/13

Coleccin Arraylist
Al igual que ocurre con los arrays, el ndice inferior es siempre
el cero y los elementos se almacenan de forma consecuFva,
es decir, si aadimos dos elementos a una coleccin de Fpo
ArrayList (y a las que implementen la interfaz IList), el primero
ocupar la posicin cero y el segundo la posicin uno.
Para crear una instancia de este objeto, se debe uFlizar la
clase ArrayList incluida en el espacio de nombre
System.Collec,ons como se muestra a conFnuacin.
ArrayList arrayList=new ArrayList();

Coleccin Arraylist
El constructor de la clase ArrayList acepta tambin un
parmetro Fpo entero que indica la capacidad inicial del
objeto que se esta creando.
Si es necesario agregar un objeto a la coleccin, se debe
uFlizar el mtodo Add, el cual inserta el nuevo elemento en la
lFma posicin, o el mtodo Insert el cual lo inserta en la
posicin indicada.

59

18/03/13

Coleccin Arraylist

Coleccin Arraylist
Todos los objetos almacenados en un Arraylist son tratados como
objetos, por lo tanto es posible agregar todo Fpo de datos, es decir,
se puede agregar enteros, cadenas de texto, objetos de clases
propias, etc.
Y a diferencia de los array, no todos los elementos deben ser del
mismo ,po de dato. Esto en algunas ocasiones puede ser una
ventaja ya que permite almacenar gran variedad de informacin en
una sola coleccin, sin embargo, por razones de rendimiento (cast,
boxing, unboxing; converFr un Fpo por valor en uno por referencia
cuando va a guardarlo en la coleccin (boxing), y el proceso inverso
cuando lo queremos recuperar (unboxing)), hay ocasiones en las que
es preferible uFlizar las colecciones genricas.

60

18/03/13

Coleccin Arraylist
Si es necesario quitar elementos de la coleccin, se debe usar
el mtodo remove, removeAt o RemoveRange, los cuales
eliminan el objeto pasado como parmetro, o un elemento en
una posicin especica, o un grupo de elementos
respecFvamente.

Coleccin Arraylist
Las propiedades ms uFlizadas de esta coleccin son : Count y
Capacity.
La primera sirve para conocer la canFdad actual de elementos
que conFene la coleccin.
La segunda indica la capacidad mxima actual de la coleccin
para almacenar elementos. Es necesario tener presente que la
capacidad de la coleccin, aumenta en caso de ser necesario
al insertar un elemento, con lo que se garanFza el
redimensionamiento automFco.

61

18/03/13

Coleccin Arraylist
La capacidad de una coleccin nunca podr ser menor a la
canFdad total de elementos contenidos, por lo que si se
modica manualmente la propiedad Capacity y se le asigna un
valor menor que el valor devuelto por la propiedad Count,
obtendremos una excepcin de Fpo
ArgumentOutOfRangeExcep,on .

62

18/03/13

Coleccin Arraylist
Para acceder a los elementos contenidos por la coleccin se
puede hacer mediante el uso de ndices o mediante la
instruccin foreach.

Cul elegir?
Determinar qu Fpo de coleccin usar en un caso especico, es tarea del
desarrollador y se debe evaluar las condiciones para determinar la manera
ms eciente de administrar los recursos.
Si es un escenario donde no conocemos el tamao que tendr la coleccin
y si adems ser muy probable que el tamao vare, entonces ser
recomendable bajo todas las dems circunstancias usar un ArrayList en
lugar de un array debido a que el ArrayList brinda la posibilidad de
redimensionarlo automFcamente.
Sin embargo, para escenarios donde se conoce de antemano la canFdad
total de elementos a almacenar y si todos son del mismo Fpo, se debe usar
el array convencional ya que los objetos son almacenados en su Fpo de
datos naFvo y no es necesario hacer conversiones.

63

Anda mungkin juga menyukai