Você está na página 1de 47

Lenguaje de Programacion III

La plataforma .NET
(.Net Framework)

Por: Carlos Castro Grande

ndice
Introduccin
Caractersticas de .NET
Componentes .NET
Plataforma .NET
Novedades Framework 2.0
Ejemplo
Enlaces de inters

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Introduccin

Microsoft.NET es el conjunto de nuevas tecnologas en


las que Microsoft ha estado trabajando durante los
ltimos aos
.NET ofrece una plataforma sencilla y potente para
distribuir el software en forma de servicios que puedan
ser suministrados remotamente y que puedan
comunicarse y combinarse unos con otros de manera
totalmente independiente de la plataforma, lenguaje de
programacin y modelo de componentes con los que
hayan sido desarrollados.

www.microsoft.com/net
www.microsoft.com/latam/net/

Caractersticas de .NET

.NET es una nueva plataforma para el desarrollo y explotacin


de aplicaciones gestionadas (managed) modernas y
orientadas a objetos.

Las aplicaciones .NET se pueden desarrollar en cualquier


lenguaje de programacin que se ajusta a .NET

.NET soporta una extensa coleccin de libreras de clases


independientes del lenguaje de programacin.

.NET soporta la creacin de componentes.

.NET ofrece integracin multi-lenguaje, reutilizacin de


componentes, y herencia entre componentes desarrollados en
diferentes lenguajes.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

.NET ofrece un nueva manera de desarrollar aplicaciones


de sobremesa usando las clases Windows Forms
.NET ofrece una nueva manera de desarrollar
aplicaciones basadas en navegador Web a travs de
ASP.NET
Las clases ADO.NET proveen una arquitectura
desconectada para acceso a datos a travs de Internet
.NET soporta la creacin de Servicios Web XML
independientes de la plataforma, a travs de SOAP
(Simple Object Access Protocol) y WSDL (Web Services
Description Language)
.NET ofrece una nueva arquitectura para el desarrollo y
explotacin de objetos remotos
.NET convierte a varias tecnologas y tcnicas Windows
en obsoletas

Componentes de .NET

Microsoft.NET est compuesto de:

Plataforma .NET
.NET Framework SDK
Visual Studio .NET
Servicios Web (Microsoft .NET myServices)
Servidores para empresas (SQL Server.NET...)

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Plataforma .NET
El concepto en el que se basa .NET no es
nuevo.
Java y su entorno de ejecucin (JVM) ya
utilizan el concepto de encapsulamiento
del sistema operativo para permitir la
interoperabilidad entre diferentes
sistemas operativos.

VB

C++

C#

JScript

ASP.NET: Servicios Web


y Web Forms

Windows
Forms

ADO.NET, XML, Enterprise Services


Base Class Library

Visual Studio.NET

Common Language Specification - CLS

Common Language Runtime


Vista general de la plataforma
Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Novedades Framework 2.0

Soporte para plataforma de 64-bit


La I/O ha sido mejorada para leer y escribir datos
usando compresin GZIP
Nueva clase GZipStream
La clase SerialPort permite acceso a puertos y
comunicacin con dispositivos serie.
Soporte SMTP para envo y recepcin de mensajes de
e-mail
Clase SmtpClient tiene mtodos para enviar
mensajes (Send, SendAsync)
Los Mensajes en s se manejan como
MailAddress, Message, MailAttachment
Soporte FTP aadido: System.Net.FtpMethods
Ping est soportado:
System.Net.NetworkInformation.Ping

Common Language Runtime (CLR)

Un Runtime es un entorno en el que se ejecutan los


programas.

El CLR se encarga de gestionar la ejecucin de las


aplicaciones .NET.

Al cdigo escrito para ejecutarse en la plataforma .NET


se le llama cdigo gestionado.

Al cdigo escrito para ejecutarse directamente se le


llama cdigo no gestionado o cdigo nativo.

El CLR realiza la compilacin Just in Time (JIT) que


traduce el cdigo gestionado en cdigo nativo sobre la
arquitectura de hardware que est corriendo.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Modelo de ejecucin
Cdigo
fuente

C#

VB

Compilador

Cdigo
manejado

Compilador

C++
Cdigo no
manejado

Compilador

Ejecutable (.EXE), Pgina Web (.ASPX),


Servicio Local (.DLL), Servicio Web (.ASMX)

Common Language Runtime


Compilador JIT
Cdigo Nativo

Servicios del Sistema Operativo

Caractersticas y servicios que ofrece:

Ejecucin multiplataforma
Integracin de lenguajes
Gestin de memoria (Recolector de basura)
Tratamiento de excepciones
Soporte multi-hilo (multi-threading)
Distribucin transparente
Interoperabilidad con cdigo antiguo

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Clases de la plataforma .NET (FCL)

La librera de clases (Framework Class


Library) es una librera formada por cientos
de tipos que permiten acceder a los servicios
ofrecidos por el CLR y a sus funcionalidades
ms frecuentemente usadas.

Adems el programador puede crear nuevas


clases que extiendan su funcionalidad y se
integren perfectamente con el resto de las
clases de la FCL.

Esta librera de clases est escrita en


MSIL

Cualquier lenguaje cuyo compilador


genere MSIL podr usarla.

Con esta librera podemos crear todo


tipo de aplicaciones: aplicaciones de
consola, de ventanas, servicios Web,
ASP.NET...

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Dada la amplitud de la FCL, ha sido


necesario organizar las clases en ella
incluida en espacios de nombres
(Namespace) que agrupen clases con
funcionalidades similares.

El espacio de nombres System es el


espacio raz del que cuelgan todos los
dems.

Espacios de nombres ms usados:

System.IO: Manipulacin de
ficheros.

System.Reflection: Acceso a
los metadatos que acompaan a
los mdulos de cdigo.

System.Math: Funciones
logartmicas, trigonomtricas...

System.XML: Acceso a datos en


formato XML.

Sytem.Web: Aplicaciones Web.

Huancayo - 2008

Carlos Castro Grande

System: Contiene tipos de datos


muy usados, datos bsicos, tablas,
excepciones... Es el raz.

System.Object: Soporta toda la


jerarqua de las clases de .NET.

System.Collections:
Colecciones de datos de uso comn
como pilas, colas, listas...

System.Data: Manipulacin de
bases de datos. Forma la
denominada arquitectura ADO.NET.

Lenguaje de Programacion III

ASP.NET

ASP.NET es la versin para la


plataforma .NET de la tecnologa ASP
(Active Server Pages).

Dentro de esta capa podemos distinguir


tres partes muy diferenciadas:

Web Forms
Server Controls
Web Services

Windows Forms

Son una forma avanzada e integrada de


crear aplicaciones de escritorio Win32
estndar.

Descienden de las Windows Foundation


Classes (WFC) de Microsoft.

Cualquier lenguaje de la plataforma .Net


puede utilizar WinForms.

Forman parte de las clases de la plataforma


.NET en el espacio de nombres:
System.Windows.Forms

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

.NET Framework SDK

Microsoft distribuye este kit de desarrollo como


parte del paquete .NET. Disponible en:
http://msdn.microsoft.com/netframework/technologyinfo/howtoget/default.aspx

Este kit contiene documentacin sobre la


plataforma, ejemplos y cdigo fuente, y una
serie de utilidades que sirven para desarrollo y
prueba de aplicaciones .NET.

Visual Studio.NET

Es un entorno grfico que permite a los


desarrolladores crear, probar y depurar aplicaciones
desarrolladas o no para la plataforma .NET.

Inicialmente se llam Visual Studio 7.0 ya que es la


evolucin del Visual Studio 6.0.

La ltima versin es el Visual Studio 2005.

SharpDevelop es un IDE open source para .NET


que representa una buena alternativa a Visual
Studio.NET:
http://www.icsharpcode.net/opensource/sd/

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Este entorno incorpora los siguientes lenguajes de


programacin:
Visual Basic.NET: Versin .NET de Visual Basic
6.0.
Visual C++.net: Evolucin de Visual C++.
Visual J#.NET: Adaptacin de Visual J++.
Visual C#.NET: Un nuevo lenguaje de
programacin OO.

Empresas ajenas han creado compiladores de sus


lenguajes para la plataforma .NET:
Eiffel, Perl, Python, Haskell, Pascal, Oberon...

Desarrollando para la plataforma


.NET

.NET es independiente del lenguaje de


programacin, no estamos restringidos a
desarrollar en Visual C++ y Basic:
Existen

compiladores para C#, Visual Basic.NET,


Jscript.NET, COBOL, Python, Perl, etc.
.NET soporta estos lenguajes no soportando
realmente ninguno de ellos:. NET slo entiende
Microsoft Intermediate Language (MSIL)

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Una plataforma independiente


del lenguaje

En .NET se traduce cdigo fuente a IL (Intermediate


Language) + Metadatos
IL es compilado antes de ser ejecutado y no est
diseado para un lenguaje en particular como en Java
Las sentencias IL manipulan tipos comunes compartidos
por todos los lenguajes .NET (Common Type System
CTS)
El Common Language Runtime (CLR) es responsable de
cargar y ejecutar una aplicacin .NET

Usa compilacin JIT (Just-In-Time) para traducir IL a


cdigo nativo
IL es siempre compilado y nunca interpretado
Cada mtodo del cdigo IL slo es compilado una vez
cuando es indicado.

Hola Mundo en C# .NET


// fichero: hola.cs
using System;
class Hola {
public static void Main() {
Console.WriteLine(Hola Mn);
}
}

Todo programa en C# contiene al


menos una clase

Main es el punto de entrada del


programa

Console.WriteLine(... ),
visualiza un mensaje, invocando
mtodo WriteLine de la clase
Console

El espacio de nombres System


pertenece a .NET FCL (Framework
Class Library)

FCL contiene muchas clases tiles, que


pueden usarse desde nuestras
.NETCarlos Castro Grande
Huancayoaplicaciones
- 2008

Lenguaje de Programacion III

Introduccin a Visual Studio 2005

Entorno integrado de desarrollo (IDE)

Permite programar en los diferentes


lenguajes .NET

Dispone de herramientas y utilidades para


editar y manipular distintos tipos de
ficheros.

Visual Studio 2005:

Productividad Personalizada
Testers
Arquitectos
Desarrolladores
Consultores
Profesionales
VB6 Devs
Hobbyists
Estudiantes
Entusiastas
Novatos
Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

El IDE de Visual Studio 2005

La pgina de Inicio

Barra de
herramientas

Proyectos
recientes

Ayuda

Nuevo proyecto
Proyecto C# .NET

Conjunto de ficheros relacionados, imgenes y


documentacin, etc.

Solucin

C# .NET

Conjunto de proyectos correspondientes a una o


varias aplicaciones.

Aplicacin

Windows

Cualquier aplicacin que funciona en un SO


Windows
Microsoft Word
Microsoft Internet Explorer

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Carpeta de los
proyectos de
Visual C#

Aplicacin Windows
seleccionada

Descripcin del
tipo de proyecto

El IDE despus de un nuevo proyecto

Barra de
Men
Fichas

Ficha
Activa
Formulario
(aplicacin
windows)

Lenguaje de Programacion III

Explorador
de
Soluciones
Huancayo - 2008

Ventana de
Propiedades
Carlos Castro Grande

La Barra de Men y la Barra de Herramientas

La barra de men

La barra de herramientas
Abrir un fichero

Guardar fichero

Explorador de

Caja de

soluciones

Herramientas

Examinador
de Objetos
Agregar nuevo
elemento al proyecto

Guardar todo

Ventana de
comandos

Pgina de
Inicio

Propiedades

Ventanas de trabajo

Explorador de soluciones
Mostrar todos
los archivos

Actualizar

Propiedades

Ver cdigo

Ver
diseador

Ver
diagrama
de clase

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

El cuadro de herramientas

Ventana acoplada:
Ocultacin
automtica

La ventana de propiedades
Componente seleccionado
Ordenacin
alfabtica
Eventos
Clasificacin por
categoras

Nombre de

Valor actual

La propiedad

Descripcin de
La propiedad actual

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Ayuda de Visual Studio 2005

Nuevas opciones

El IDE es ms configurable.

Ayuda
Ayuda para
para
acoplar
acoplar las
las
ventanas
ventanas
(Docking)
(Docking)

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

IntelliSense: ayuda inteligente para la edicin.

La Lista de Tareas i La Lista de Errores se


presentan en dos ventanas diferentes.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Posibilidad de Editar y Continuar como en VB 6.

Publicacin del proyecto (ClickOnce).

Y adems:
Diseador de Clases
Diseador de aplicaciones
Asistente excepciones,

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Programa simple: Mostrar un texto en un formulario

El programa:
Formulario que contendr los controles
Etiqueta para mostrar el texto

Crear un nuevo proyecto:


Tipo proyecto: Aplicacin Windows
Nombre: ProyectoSencillo

Poner un ttulo al fomulario:

La Propiedad Text determina el texto en la barra de ttulo

Valor: Un programa sencillo

Guardar el proyecto
Ejecutar el proyecto:
Generar solucin
Iniciar el programa

Aspecto del formulario resultante durante su ejecucin

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Lenguaje de Programacion III


El Lenguaje C#

ndice

Introduccin
Estructura de los programas
Variables y Tipos de Datos

Operadores y expresiones
Control del flujo

Sistema comn de tipos


Identificadores
Variables y Constantes
Tipos definidos por el usuario: enumeraciones y estructuras
Arrays
Manipulacin de cadenas

Condicionales
Bucles
Saltos

Funciones y Mtodos
Depuracin y Tratamiento de Errores

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Introduccin

C# es el ltimo en una lnea de evolucin de los lenguajes derivados


de C, que incluye C++ y Java.

Usado por Microsoft para desarrollar la mayora del cdigo de .NET.

Es el lenguaje ideal para el desarrollo en .NET

C# es orientado a objetos, moderno, simple y potente.

En C# todo es un objeto.

Caractersticas:

Mejoras sobre C++ en las reas de seguridad de datos, versionamiento,


eventos y recoleccin de basura.

Acceso al SO, COM y APIs

Soporta el modo unsafe que permite el uso de punteros como en C.

Generacin de documentacin XML automtica.

Creacin de pginas ASP.NET y servicios Web.

En resumen: ms simple que C++ pero poderoso y flexible como l.

Estructura de los programas

Un programa en C# contiene:

Uno o ms ficheros que contienen:

Uno o ms espacios de nombres (namespace) que contienen:

Tipos de datos: clases, estructuras, interfaces, enumeraciones y delegados

Si no se declara un namespace se asume el global por defecto

Un ejecutable ha de contener obligatoriamente una funcin Main


(punto de entrada al programa)
static
static
static
static

void Main()
int Main()
void Main(string[] args)
int Main(string[] args)

Para acceder a un tipo podemos usar un camino absoluto:


System.Console.WriteLine(...);

o relativo:
using System; ...;
Console.WriteLine(...);
Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Ejemplo:
namespace N1 {
class C1 {
// ...
}
struct S1 {
// ...
}
interface I1 {
// ...
}
delegate int D1();
enum E1 {
// ...
}
}

Comentar el cdigo:

Comentarios de una lnea:


// este comentari ocupa una lnia
///<summary>
/// este s un comentari especial de documentaci XML
/// </summary>

Comentarios de varias lneas:


/*

este comentari ocupa

dues lnies

*/

Definir bloques de cdigo:


#region Definici de Variables
int x, y;
string s = "Hola";
float f;

#endregion
Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Variables y Tipos de Datos

Sistema comn de tipos (CTS)

Lo comparten todos los lenguajes de .NET

Admite tanto tipos de valor como tipos de referencia:

Tipos
Tipos de
de datos
datos
Tipos
Tipos de
de valor
valor

Tipos
Tipos de
de referencia
referencia
-

- Intrnsecos,
- Enumeraciones,
- Estructuras

Arrays
Clases
Interfaces
Punteros

Todos los tipos de datos derivan de System.Object


sistema de tipos unificado.
Cualquier tipo puede ser tratado como un objeto.

Tipos de datos bsicos


Tipo

Descripcin

Bits

Rango de valores

Alias

SByte

Bytes con signo

[-128, 127]

sbyte

Byte

Bytes sin signo

[ 0 , 255]

byte

Int16

Enteros cortos con signo

16

[-32.768, 32.767]

short

UInt16

Enteros cortos sin signo

16

[0, 65.535]

ushort

Int32

Enteros normales

32

[-2.147.483.648, 2.147.483.647]

int

UInt32

Enteros normales sin signo

32

[0, 4.294.967.295]

uint

Enteros largos

64

[-9.223.372.036.854.775.808,
9.223.372.036.854.775.807]

long

UInt64

Enteros largos sin signo

64

[0-18.446.744.073.709.551.615]

ulong

Single

Reales con 7 dgitos de precisin

32

[1,510-45 - 3,41038]

float

Double

Reales de 15-16 dgitos de precisin

64

[5,010-324 - 1,710308]

double

Decimal

Reales de 28-29 dgitos de precisin

128

[1,010-28 - 7,91028]

decimal

Boolean

Valores lgicos

32

true, false

bool

Char

Caracteres Unicode

16

[\u0000, \uFFFF]

char

String

Cadenas de caracteres

Variable

El permitido por la memoria

string

Object

Cualquier objeto

Variable

Cualquier objeto

object

Int64

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Identificadores
Dan

nombre a variables, constantes y mtodos.


Constan de caracteres alfanumricos y _
C# es Sensible a maysculas y minsculas.
Han de comenzar con letra o _
No pueden ser una palabra reservada

...si no se usa el carcter @ como prefijo :


Object @this; //@ previene el conflicto con "this"

Variables
Una

variable representa la localizacin en memoria


donde una instancia de un tipo es guardada.

Declaracin:

<tipodedato> <identificador>;
Recordar

la distincin entre tipos de valor y tipos de


referencia

Tipos de valor son tipos simples como int, long y char


Los objetos, strings y arrays son ejemplos de tipos de
referencia

Los

tipos de valor se derivan de System.ValueType

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Comparacin

entre variables de tipo valor y variables


tipo referencia:

Variables
Variables de
de tipo
tipo valor:
valor:

Contienen
Contienen sus
sus datos
datos
directamente
directamente

Variables
Variables de
de tipo
tipo referencia:
referencia:

Cada
Cada una
una tiene
tiene su
su
propia
propia copia
copia de
de datos
datos

Almacenan
Almacenan referencias
referencias aa
sus
sus datos
datos (conocidos
(conocidos
como
como objetos)
objetos)

Las
Las operaciones
operaciones
sobre
sobre una
una no
no afectan
afectan
aa otra
otra

Dos
Dos variables
variables de
de
referencia
referencia pueden
pueden
apuntar
apuntar alal mismo
mismo objeto
objeto

Las
Las operaciones
operaciones sobre
sobre
una
una pueden
pueden afectar
afectar aa
otra
otra

Inicializacin

de variables en la declaracin:

bool bln = true;


byte byt1 = 22;
char ch1=x, ch2=\u0061;
// Unicode para a
decimal dec1 = 1.23M;
double dbl1=1.23, dbl2=1.23D;
short sh = 22;
int i = 22;
long lng1=22, lng2=22L;
// L long
sbyte sb=22;
float f=1.23F;
ushort us1=22;
uint ui1=22, ui2=22U;
// U unsigned
ulong ul1=22, ul2=22U, ul3=22L, ul4=2UL;

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Los

valores de referencia son creados con la palabra


reservada new:
object o = new System.Object();

Una

variable String se puede inicializar directamente:

string s = "Hola"; // usan caracteres Unicode de 2 cars

C#

soporta secuencias de escape como en C:

string s1 = "Hola\n"; // salto de lnea


string s2 = "Hola\tque\ttal"; // tabulador

Como

las sentencias de escape comienzan con \,


para escribir este carcter hay que doblarlo, o usar
@:
string s3 = "c:\\WINNT";
string s4 = @"C:\WINNT";

mbito

y Visibilidad:

mbito:
mbito: lugar
lugar donde
donde
se
declara
una
variable.
se declara una variable.
Determina
Determina su
su accesibilidad.
accesibilidad.

La
La visibilidad
visibilidad de
de una
una
variable
fuera
de
su
variable fuera de su
mbito
mbito se
se puede
puede modificar
modificar
anteponiendo
anteponiendo public
public oo
private
private en
en su
su declaracin.
declaracin.

using System;
namespace ConsoleAppVisibilitat
{
class Simple
{
public int Var1=10;
private int Var2=20; //local
public int Var3=30;
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
Simple s = new Simple();
Console.WriteLine("Simple:");
Console.WriteLine("Var1={0},
Var3={1}",s.Var1, s.Var3);
Console.ReadLine();
}

Lenguaje de Programacion III

}
Huancayo
- 2008
}

Carlos Castro Grande


static:
static: Variable
Variable
esttica,
esttica, existe
existe durante
durante
toda
la
ejecucin
toda la ejecucin del
del
programa.
programa.
Slo
Slo existe
existe una
una sola
sola
copia
copia de
de la
la misma
misma sin
sin
necesidad
de
crear
necesidad de crear
objeto
objeto alguno.
alguno.
Hay
Hay que
que referirse
referirse aa
ella
ella usando
usando el
el
nombre
nombre completo
completo del
del
tipo
al
que
pertenece.
tipo al que pertenece.

using System;
namespace ConsoleAppVisibilitatSTAT {
class Simple
{
public static int Var3=30; //pblica i
esttica
static int Var4=40; //privada i esttica
public void mostraVar4()
{
Console.WriteLine("Var4={0}", ++Var4);
}
}
class Class1
{
[STAThread]
static void Main(string[] args) {
Simple s = new Simple();
Simple k = new Simple();
Console.WriteLine("Simple:");
Console.WriteLine("Var3={0}",Simple.Var3++);
Console.WriteLine("Var3={0}",Simple.Var3);
s.mostraVar4();
k.mostraVar4();
Console.ReadLine();

No
No afecta
afecta aa su
su
visibilidad
visibilidad
}
}
}

Constantes
El

modificador const permite definir variables


constantes:

Class Class1 {
private const int min = 1;
private const int max = 100;
public const int rango = max min;

static void Main()


{
Console.WriteLine(Class1.max,Class1.min,Class1.rango);

// o tambin Console.WriteLine(max, min, rango);

}
}
Una

constante no cambia nunca su valor.

Son

implcitamente static.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Conversin entre tipos de datos


Conversin
Conversin implcita
implcita

Ocurre
Ocurre de
de forma
forma automtica.
automtica.

Siempre
tiene
xito.
Siempre tiene xito.

Nunca
Nunca se
se pierde
pierde informacin
informacin
en
la
conversin.
en la conversin.

Conversin
Conversin explcita
explcita

Requiere
Requiere la
la realizacin
realizacin del
del cast
cast o
o
el
comando
Convert.Toxxx(var)
el comando Convert.Toxxx(var)

Puede
Puede no
no tener
tener xito.
xito.

Puede
perderse
Puede perderse informacin
informacin en
en la
la
conversin.
conversin.

int intValor = 123;


long longValor = intValor; // implcita de int a long
intvalor = (int) longValor; // explcita de long a int con cast
int x = 123456;
long y = x;
// implcita
short z = (short)x;
// explcita
double d = 1.2345678901234;
float f = (float)d;
// explcita
long l = (long)d;
// explcita
//uso de Convert:
int c=154;
MessageBox.Show(Convert.ToString(c));

Tabla de conversin implcita segura


Tipo

Se convierte de forma segura a:

Byte

short, ushort, int, uint, long, ulong, float, double, decimal

Sbyte

short, int, long, float, double, decimal

Short

int, long, float, double, decimal

Ushort

int, uint, long, ulong, float, double, decimal

Int

long, float, double, decimal

Uint

long, ulong, float, double, decimal

Long

float, double, decimal

Ulong

float, double, decimal

Float

double

Char

ushort, int, uint, long, ulong, float, double, decimal

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Tipos definidos por el usuario: Enumeraciones


Tienen por tipo base nmeros enteros.
Por defecto empieza la numeracin por 0
Definicin de una enumeracin:

enum Color { Rojo=1, Verde=2, Azul=3 }

Uso de una enumeracin:


Color colorPaleta = Color.Rojo;

o
colorPaleta = (Color)1; // Tipo int a tipo Color

Visualizacin de una variable de enumeracin:


Console.WriteLine({0}, colorPaleta.ToString());
// Muestra Rojo

Usando enumeraciones el cdigo queda ms claro i fcil de


mantener.

Tipos definidos por el usuario: Estructuras

Definicin:

struct Empleado {
public string nombre;
public int edad;
public int Sueldo = 1200;// error!, no permitido
}

Uso:

El operador new crea una variable tipo Empleado con los valores
asociados:

Empleado empresaEmpleado, otroEmpleado;


empresaEmpleado.Nombre = "Juan";
empresaEmpleado.edad = 23;
otroEmpleado = empresaEmpleado; //asignacin directa

Empleado jefeDep = new Empleado(Pepe, 45);

Todos los miembros se inician por defecto a null

El mtodo booleano Equals() permite comparar dos structs.


otroEmpleado.Equals(empresaEmpleado)

Una estructura puede contar tambin con mtodos.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Arrays
Los

arrays son tipos referencia derivados de


System.Array

Sus

ndices comienzan en 0

Ejemplo: string[] a; // array de cadenas


El tipo de datos array viene dado por string[]
el nombre del array es una referencia al array

Para

crear espacio para los elementos usar:

string[] a = new string[100];


Los arrays se pueden inicializar directamente:
string[] animales = {"gato", "perro", "caballo"};

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


Arrays

multidimensionales:

string[,] ar = {{"perro","conejo"}, {"gato","caballo"}};


double[,] tempAnual = new double[12,31];

El

rango de los elementos del array es dinmico:


Si se crea un nuevo array sobre el mismo se libera la memoria
que ocupaba y se pierde toda la informacin que contenia.

Informacin

sobre un array:

Dimensiones:

Nmero de elementos:

ndice superior e inferior: GetLowerBound(d);


GetUpperBound(d)

Rank
GetLength()

(d=dimensin, desde 0 hasta Rank-1)

Saber si es un array: if (a is Array) ....

Recorrido

ndices

de los elementos de un array sin conocer sus

foreach (string a in animales)


Console.WriteLine(a);
Otras

operaciones: Copy(); Sort(); ...

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Manipulacin de cadenas

Los tipos char y string permiten manipular caracteres.

Una variable char puede contener cualquier carcter Unicode

Manipulacion de caracteres: IsDigit(); IsLetter();


IsPunctuation(); ToUpper(); ToLower(), ToString();...

Una variable tipo string es una referencia al lugar donde se


guarda la cadena.

Cada vez que se modifica el valor de la cadena se asigna un


nuevo bloque de memoria y se libera el anterior.

Concatenacin: Nuevo operador + (no existe en C ,C++) o se


puede usar tambin: Concat()
string a, b;
a="Programacin ";
b="con C#";
Console.WriteLine(Usando +: {0}", a+b);
Console.WriteLine(" Usando concat: {0}", string.Concat(a, b));

Operadores y expresiones

Operadores aritmticos:

Operadores relacionales:

+ Suma unaria: +a
- Resta unaria: -a
++ Incremento ++a o a++
-- Decremento: --a o a-+ Suma a+b
- Resta: a-b
* Multiplicacin: a*b
/ Divisin: a/b
% Resto: a%b

Operadores de manipulacin
de bits:

int i1=32;
int i2=i1<<2; // i2==128
int i3=i1>>3; // i3==4

Lenguaje de Programacion III

Huancayo - 2008

==
!=
<
<=
>
>=
!
&
|
^
~
&&
||

Igualdad: a==b
Desigualdad: a!=b
Menor que: a<b
Menor o igual: a<=b
Mayor que: a>b
Mayor que o Igual a: a>=b
Negacin: !a
And binario: a&b
Or binario: a|b
Or exclusivo: a^b
Negacin binaria: ~a
And lgico: a&&b
Or lgico: a||b
Carlos Castro Grande

Otros operadores

min=a<b ? a:b; // equivale a: if a<b min=a else min=b;

. accede a miembros, e.j. args.Length

() cast (conversin de tipos)

[] ndice de arrays, punteros, propiedades y atributos

new crea nuevos objetos

typeof obtiene el tipo de un objeto

is compara el tipo de un objeto en runtime

sizeof obtiene el tamao de un tipo en bytes

* obtiene la variable a la que apunta un puntero

-> p->m es lo mismo que (*).m

& devuelve direccin de un operando

Las expresiones en C# son similares a C y C++

Precedencia:
+

Operadores
()
* / %
+ < <= > >=
== !=
=

Asocia tividad
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Derecha a izquierda

Tipo
Parntesis
Multiplicativos
Adicin
Relacionales
Igualdad
Asignacin

Asociatividad:
Todos

los operadores binarios, salvo los de asignacin,


son asociativos por la izquierda.

Los

operadores de asignacin y el operador


condicional(?) son asociativos por la derecha.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Control del flujo

Instrucciones

Pueden ocupar ms de
una lnea y deben
terminarse con un ;

int i, j;
i=1;

Un bloque y su bloque padre o


pueden tener una variable con
el mismo nombre
{

Grupos de instrucciones
se pueden agrupar en
bloques con { y }

{
j=2;
i=i+j;

Bloques hermanos pueden tener


variables con el mismo nombre
{

}
{
}

int i;
...
{
int i;
...
}

int i;

...

...
int i;
...

Condicionales
if (<condicin>)
<sentenciasCondTrue>
if (<condicin>)
{
<sentenciasCondTrue>
[else
{
<sentenciasCondFalse>
}]

Lenguaje de Programacion III

Ejemplo:
if (a>b) Mayor=a;
if (a>b)
{
Mayor=a;
Menor=b;
}
else
{
Mayor=b;
Menor=a;
}

Huancayo - 2008

Carlos Castro Grande

Ejemplo: if en cascada
enum Palo { Treboles, Corazones, Diamantes,
Picas}
Palo cartas = Palo.Corazones;
string color;
if (cartas == Palo.Treboles)
color = Negro;
else if (cartas == Palo.Corazones)
color = Rojo";
else if (palo == Palo.Diamantes)
color = "Rojo";
else
color = Negro";

Condicionales mltiples
switch (<expressin>)
{
case Opc1 :
[<sentencias-1>]
break;
[case Opc2 :
[<sentencias-2>]
break;

default:
<sentencias-def>
break;]
}

Lenguaje de Programacion III

Ejemplo:
switch(B)
switch(B)
{{
case
case 5:
5:
Console.WriteLine(B
Console.WriteLine(B es
es ptimo);
ptimo);
A=10;
A=10;
break;
break;
case
case 1:
1:
case
case 2:
2:
case
3:
case 3: //1,2,3
//1,2,3 sin
sin break
break pq
pq estn
estn vacos
vacos
case
case 4:
4:
Console.WriteLine(B
Console.WriteLine(B est
est por
por
debajo
debajo del
del valor
valor ptimo);
ptimo);
A=3;
A=3;
break;
break;
default:
default:
Console.WriteLine(B
Console.WriteLine(B no
no es
es vlido);
vlido);
break;
break;
}}

Huancayo - 2008

Carlos Castro Grande

Bucles
for

for (int i=0; i < 5; i++) { // i declarada dentro del bucle


Console.WriteLine(i);
}
for (;;) {
... // bucle infinito
}
for (int i=1, j=2; i<=5; i++, j+=2) { //mltiples expresiones
System.Console.WriteLine("i=" + i + ", j=" + j);
}

while

Ejecuta instrucciones en funcin de un valor


booleano.
Evala la expresin booleana al principio del bucle.

while
while (true)
(true) {{
...
...
}}

int
int ii == 10;
10;
while
while (i
(i >> 5)
5) {{
...
...
i--;
i--;
}}

int
int ii == 0;
0;
while
while (i
(i << 10)
10) {{
Console.WriteLine(i);
Console.WriteLine(i);
i++;
i++;
0 1 2 3 4 5 6 7 8 9
}}

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

do

... while
Ejecuta instrucciones en funcin de un valor
booleano.
Evala la expresin booleana al final del bucle.
do
do {{
...
...
}} while
while (true);
(true);

int
int ii == 10;
10;
do
do {{
...
...
i--;
i--;
}}
while
while (i
(i >> 5);
5);

int
int ii == 0;
0;
do
do {{
Console.WriteLine(i);
Console.WriteLine(i);
i++;
i++;
0 1 2 3 4 5 6 7 8 9 10
}} while
(i
<=
10);
while (i <= 10);

foreach

Este bucle es nuevo en C#.


Itera sobre una coleccin de elementos
No permite cambiar el valor de los tems

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

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Instrucciones de salto
continue: Salta el resto de la iteracin y comienza

la siguiente:

for (int i=1; i<=5; i++) {


if (i==3)
continue;
Console.WriteLine(i);
}

break

: Sale directamente de un bucle sin acabarlo:

for (int i=1; i<=5; i++) {


if (i==3)
break;
Console.WriteLine(i);
}

return [<expresin>]: Sale del mtodo actual

Funciones y Mtodos

En C# todo son funciones, no existen procedimientos.

Todas las funciones siempre pertenecen a una clase,


luego son todas las funciones son mtodos.

Los mtodos, por defecto, son privados (private)

Main es un mtodo y para definir mtodos propios se usa


la misma sintaxis:
using System;
class EjemploClase
{
static void EjemploMetodo( )
{
Console.WriteLine("Este es un ejemplo de mtodo");
}
static void Main( )
{
// ...
}
}

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Una vez definido un mtodo, se puede:


Llamar a un mtodo desde dentro de la misma clase

Se usa el nombre del mtodo seguido de una lista de


parmetros entre parntesis

Llamar a un mtodo que est en una clase diferente

Hay que indicar al compilador cul es la clase que contiene


el mtodo que se desea llamar
El mtodo llamado se debe declarar como public

Usar llamadas anidadas

Unos mtodos pueden hacer llamadas a otros, que a su


vez pueden llamar a otros mtodos, y as sucesivamente.

Variables locales
Se definen dentro del mtodo
Son privadas para el mtodo
Se destruyen a la salida del mtodo

Variables compartidas
Se definen en la clase
Permiten compartir datos entre mtodos

Conflictos de mbito
El compilador no avisa si hay conflictos entre nombres de las
variables locales y las de clase.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Devolucin de valores

El mtodo se debe declarar con un tipo que no sea void

Se aade una instruccin return con una expresin

Fija el valor de retorno


Se devuelve al llamador

Los mtodos que no son void deben devolver siempre un valor

static
static int
int DosMasDos(
DosMasDos( )) {{
int
int a,b;
a,b;
aa == 2;
2;
bb == 2;
2;
return
return aa ++ b;
b;
}}
int
int x;
x;
xx == DosMasDos(
DosMasDos( );
);
Console.WriteLine(x);
Console.WriteLine(x);

Parmetros
En C# todos los parmetros se pasan por valor si no
se indica lo contrario.
Declaracin de parmetros

Se ponen entre parntesis despus del nombre del mtodo


Se define el tipo y el nombre de cada parmetro

Llamadas

a mtodos con parmetros

Un valor para cada parmetro

Paso

de parmetros: por valor, por referencia, de


salida y lista de parmetros de longitud variable.

static
static void
void MetodoConParametros(int
MetodoConParametros(int n,
n, string
string y)
y)
{{ ...
}
... }
MetodoConParametros(2,
MetodoConParametros(2, "Hola,
"Hola, mundo");
mundo");
Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Paso

por valor

Se copia el valor del parmetro


Se puede cambiar el nombre de la variable dentro del
mtodo
No afecta al valor fuera del mtodo
El parmetro debe ser de un tipo igual o compatible

static
static void
void SumaUno(int
SumaUno(int x)
x)
{{
x++;
x++; //
// Incrementar
Incrementar xx
}}
static
static void
void Main(
Main( ))
{{
int
int kk == 6;
6;
SumaUno(k);
SumaUno(k);
Console.WriteLine(k);
Console.WriteLine(k); //
// Muestra
Muestra el
el valor
valor 6,
6, no
no 77
}}

Paso

por referencia

Se pasa una referencia a una posicin de memoria.


Se usa la palabra clave ref en la declaracin y las llamadas al
mtodo.
Los tipos y valores de variables deben coincidir.
Los cambios hechos en el mtodo afectan al llamador.
Hay que asignar un valor al parmetro antes de la llamada al
mtodo.

static
static int
int RaizCuarta(ref
RaizCuarta(ref int
int x)
x)
{{
xx == (int)Math.Sqrt(x);
(int)Math.Sqrt(x);
return
return (int)Math.Sqrt(x);
(int)Math.Sqrt(x);
}}
static
static void
void Main(
Main( )) {{
int
int num
num == 625;
625; //siempre
//siempreinicializar
inicializarantes
antesde
deutilizarla!!
utilizarla!!
Console.WriteLine(Raiz
cuarta:
{0},
Console.WriteLine(Raiz cuarta: {0}, el
el nmero
nmero
original
es:
{1},
RaizCuarta(ref
num),
num);
original es: {1}, RaizCuarta(ref num), num);
}}
Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Parmetros

de salida

No sirven para pasar valores al mtodo.


Slo devuelven resultados desde el mtodo.
Se usa la palabra clave out en la declaracin y las llamadas al
mtodo.
La variable no necesita estar inicializada.
Al parmetro de salida hay que asignarle siempre un valor.
static
static void
void OutDemo(out
OutDemo(out int
int p)
p)
{{
pp == 255;
255;
//
...
// ...
}}
static
static void
void Main(
Main( )) {{
int
int n;
n; //
// sin
sin inicializar
inicializar
OutDemo(out
n);
OutDemo(out n);
}}

Lista

de parmetros de longitud variable

Se usa la palabra reservada params.


Se declara como un array al final de la lista de parmetros.
Siempre se pasan por valor.
static
static long
long SumaLista(params
SumaLista(params long[
long[ ]] v)
v) {{
long
long total,
total, i;
i;
for
(i
for (i == 0,
0, total
total == 0;
0; ii << v.Length;
v.Length; i++)
i++)
total
+=
v[i];
total += v[i];
return
return total;
total;
}}
static
static void
void Main(
Main( )) {{
long
long xx == SumaLista(63,21,84);
SumaLista(63,21,84);
}}

Gua

para el paso de parmetros:

El paso por valor es el ms habitual y suele ser el ms eficaz.


El valor de retorno del mtodo es til para un solo valor.
ref y/o out son tiles para ms de un valor de retorno.
ref slo se usa si los datos se pasan en ambos sentidos.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Devolucin

de arrays desde mtodos:

class
class EjemploArr1
EjemploArr1
{{
static
static void
void Main(
Main( )) {{
int[
int[ ]] array
array == CreateArray(42);
CreateArray(42);
...
...
}}
static
static int[
int[ ]] CreateArray(int
CreateArray(int tamano)
tamano)
{{
int[
int[ ]] creada
creada == new
new int[tamano];
int[tamano];
return
return creada;
creada;
}}
}}

Paso

de arrays como parmetros

Un parmetro de array es una copia de la variable array.


No es una copia de los elementos del array.
Se modifican los valores originales del array.

class
class EjemploArr2
EjemploArr2 {{
static
static void
void Main(
Main( ))
{{
int[
int[ ]] arg
arg == {10,
{10, 9,
9, 8,
8, 7};
7};
Method(arg);
Method(arg);
System.Console.WriteLine(arg[0]);
System.Console.WriteLine(arg[0]);
}}

}}

static
static void
void Metodo(int[
Metodo(int[ ]] parametro)
parametro) {{
parametro[0]++;
parametro[0]++;
}}

Lenguaje de Programacion III

Este
Este mtodo
mtodo modificar
modificar
elel array
array original
original
creado
creado en
en Main
Main

Huancayo - 2008

Carlos Castro Grande

Mtodos recursivos
Hacen llamadas a s mismos
til para resolver ciertos problemas

static
static ulong
ulong Fibonacci(ulong
Fibonacci(ulong n)
n)
{{
if
if (n
(n <=
<= 2)
2)
return
return 1;
1;
else
else
return
return Fibonacci(n-1)
Fibonacci(n-1) ++ Fibonacci(n-2);
Fibonacci(n-2);
}}

Mtodos sobrecargados (overloading)


Comparten un nombre dentro de la clase.
Se distinguen por el nmero y tipo de parmetros.
Usarlos cuando:

hay mtodos similares que requieren parmetros diferentes


si se quiere aadir funcionalidad al cdigo existente.

No abusar de ellos pues son difciles de mantener y de depurar.


class
class OverloadingExample
OverloadingExample
{{
static
static int
int Suma(int
Suma(int a,
a, int
int b)
b)
{{
return
return aa ++ b;
b;
}}
static
static int
int Suma(int
Suma(int a,
a, int
int b,
b, int
int c)
c)
{{
return
return aa ++ bb ++ c;
c;
}}
static
static void
void Main(
Main( ))
{{
Console.WriteLine(Suma(1,2)
Console.WriteLine(Suma(1,2) ++ Suma(1,2,3));
Suma(1,2,3));
}}
}}

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Depuracin y Tratamiento de Errores

Los errores (sintcticos y semnticos) pueden


aparecer en el cdigo de forma inesperada.

Visual Studio ofrece potentes y eficaces


herramientas para la depuracin de los errores.

El depurador de Visual Studio proporciona un men


Depurar que ofrece acceso a las herramientas del
depurador.

Adems, el lenguaje C# incorpora tcnicas para


controlar las posibles situaciones de error en tiempo
de ejecucin.

Cuando una aplicacin se ejecuta en modo de depuracin


VS es capaz de conocer qu ocurre exactamente en cada
lnea de cdigo.

Esa informacin de depuracin est contenida en los


ficheros .pdb

En modo depuracin podremos:


Consultar y modificar el valor de las variables,
Detener un momento la ejecucin Editar el cdigo y
continuar la ejecucin,
Parar la ejecucin en un lugar concreto,
Ejecutar el programa lnea a lnea,
Realizar llamadas de prueba a mtodos en la ventana
Inmediato sin ejecutar la aplicacin,
Etc.

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Excepciones
Las

excepciones son el mecanismo OO de C#


para controlar las situaciones de error.

por

qu usar excepciones?

El tratamiento tradicional de errores resulta muy


complicado de gestionar:
Lgica
Lgicadel
delprograma
programa

int
int errorCodigo
errorCodigo == 0;
0;
FileInfo
FileInfo source
source == new
new FileInfo("code.cs");
FileInfo("code.cs");
if
(errorCodigo
==
-1)
if (errorCodigo == -1) goto
goto Fallo;
Fallo;
int
longitud
=
(int)source.Length;
int longitud = (int)source.Length;
if
if (errorCodigo
(errorCodigo ==
== -2)
-2) goto
goto Fallo;
Fallo;
char[]
contenido
=
new
char[longitud];
char[] contenido = new char[longitud];
if
if (errorCodigo
(errorCodigo ==
== -3)
-3) goto
goto Fallo;
Fallo;
//
No
hay
problemas
...
// No hay problemas ...
Trat.
Fallo:
Trat.De
Deerrores
errores
Fallo: ...
...

Todas las excepciones derivan de System.Exception


Excepciones de .NET Base Class Library

Lenguaje de Programacion III

Huancayo - 2008

Carlos Castro Grande

Você também pode gostar