Sei sulla pagina 1di 30

Programaci amb C# .

NET
3: El Lenguaje C#

Jordi Linares i Pellicer

ndice
! ! !

Introduccin Estructura de los programas Variables y Tipos de Datos


" " " " " "

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

! !

Operadores y expresiones Control del flujo


Condicionales " Bucles " Saltos
"

! !

Funciones y Mtodos Depuracin y Tratamiento de Errores

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. C# es orientado a objetos, moderno, simple y potente. En C# todo es un objeto. Actualmente, C# es un estndar ECMA (European Computer Association Manufacturing) e ISO. Cualquiera que obtenga su especificacin puede desarrollar un compilador totalmente compatible con la garanta del control que se ejerce sobre su evolucin. 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.

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

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(...);

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

ndice
! !

Introduccin Estructura de los programas

Variables y Tipos de Datos


" " " " " "

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

! !

Operadores y expresiones Control del flujo


Condicionales " Bucles " Saltos
"

! !

Funciones y Mtodos Depuracin y Tratamiento de Errores

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 de datos Tipos de valor


- Intrnsecos, - Enumeraciones, - Estructuras "

Tipos de referencia
Arrays Clases Interfaces Punteros, Delegados

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 SByte Byte Int16 UInt16 Int32 UInt32 Int64 UInt64 Single Double Decimal Boolean Char String Object Descripcin Bytes con signo Bytes sin signo Enteros cortos con signo Enteros cortos sin signo Enteros normales Enteros normales sin signo Enteros largos Enteros largos sin signo Reales con 7 dgitos de precisin Reales de 15-16 dgitos de precisin Reales de 28-29 dgitos de precisin Valores lgicos Caracteres Unicode Cadenas de caracteres Cualquier objeto Bits 8 8 16 16 32 32 64 64 32 64 128 32 16 Variable Variable Rango de valores [-128, 127] [ 0 , 255] [-32.768, 32.767] [0, 65.535] [-2.147.483.648, 2.147.483.647] [0, 4.294.967.295] [-9.223.372.036.854.775.808, 9.223.372.036.854.775.807] [0-18.446.744.073.709.551.615] [1,5!10-45 [1,0!10-28 true, false [\u0000, \uFFFF] El permitido por la memoria Cualquier objeto 3,4!1038] 1,7!10308] 7,9!1028] [5,0!10-324 Alias sbyte byte short ushort int uint long ulong float double decimal bool char string object

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.


<tipodedato> <identificador>;

" Declaracin:

" 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

" Comparacin

entre variables de tipo valor y variables tipo referencia: Variables de tipo referencia:
!

Variables de tipo valor:


!

Contienen sus datos directamente Cada una tiene su propia copia de datos Las operaciones sobre una no afectan a otra

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

" 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;

" Los

valores de referencia son creados con la palabra reservada new:


object o = new System.Object();

" Una " C#

variable String se puede inicializar directamente:

string s = "Hola";

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

# mbito: lugar donde se declara una variable. Determina su accesibilidad. # La visibilidad de una variable fuera de su mbito se puede modificar anteponiendo public o private en su declaracin.

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

using System; namespace ConsoleAppVisibilitatSTAT { class Simple { public static int Var3=30; // pblica // esttica

static int Var4=40; //privada i esttica public void mostraVar4() { Console.WriteLine("Var4={0}", ++Var4); }
} class Class1 static void Simple s Simple k { Main(string[] args) = new Simple(); = new Simple();

Console.WriteLine("Simple:"); Console.WriteLine("Var3={0}",Simple.Var3++); Console.WriteLine("Var3={0}",Simple.Var3); s.mostraVar4(); k.mostraVar4(); Console.ReadLine(); } } }

Constantes
" " "

El modificador const permite definir variables constantes: Una constante no cambia nunca su valor. Son implcitamente static.

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

static void Main() {


Console.WriteLine({0}-{1}-{2}, Class1.max,Class1.min,Class1.rango); // o tambin : Console.WriteLine({0}-{1}-{2},max, min, rango);

} }

Conversin entre tipos de datos


Conversin implcita & Ocurre de forma automtica. & Siempre tiene xito. & Nunca se pierde informacin en la conversin. Conversin explcita & Requiere la realizacin del cast o el comando Convert.Toxxx(var) & Puede no tener xito. & Puede perderse informacin en la 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 la classe Convert: int c=154; Console.WriteLine(Convert.ToString(c));

Tabla de conversin implcita segura Tipo


Byte Sbyte Short Ushort Int Uint Long Ulong Float Char

Se convierte de forma segura a:


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

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

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

Tipos definidos por el usuario: Enumeraciones


" " "

Las enumeraciones se crean cuando se necesita que una variable tome valores de una lista limitada no predefinida. 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 y 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! public Empleado(string nom, int edad ) }

" Uso:

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

" Todos " El

los miembros se inician por defecto a null

mtodo booleano Equals() permite comparar dos structs.


otroEmpleado.Equals(empresaEmpleado)

Arrays
" Los

arrays son tipos de referencia derivados de System.Array ndices comienzan en 0


// array de cadenas

" Sus

Ejemplo: string[] a;

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

" Para crear espacio para los elementos string[] a = new string[100];

usar:

" 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. Dimensiones: .Rank Nmero total de elementos del array: .Length Nmero de elementos de la dimensin d: .GetLength(d) ndice superior e inferior: .GetLowerBound(d); .GetUpperBound(d); (d=dimensin, desde 0 hasta Rank-1) Saber si es un array: if (a is Array) .... foreach (string a in animales) Console.WriteLine(a);

"

Informacin sobre un array:


! ! ! !

"

Recorrido de los elementos de un array sin conocer sus ndices

"

Operaciones de la clase Array: Copy( ); Sort( ); ...

Manipulacin de cadenas
" " "

Los tipos char y string permiten manipular caracteres. Una variable char puede contener cualquier carcter Unicode Manipulacion de caracteres: char.IsDigit();
char.IsLetter(); char.IsPunctuation(); char.ToUpper(); char.ToLower(), char.ToString();..., etc.

" " "

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 el mtodo: String.Concat()
string a, b; a="Programaci "; b=amb C#"; Console.WriteLine(Usant operador + en {0}", a+b); Console.WriteLine(" Usant concat en {0}", string.Concat(a, b));

ndice
! ! !

Introduccin Estructura de los programas Variables y Tipos de Datos


" " " " " "

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

!
!

Operadores y expresiones
Control del flujo
Condicionales Bucles " Saltos
" "

! !

Funciones y Mtodos Depuracin y Tratamiento de Errores

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

== " != " < " <=


" " " " " " " " "

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

Operadores de manipulacin de bits:


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

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

Otros operadores
" min=a<b ".

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


cast (conversin de tipos)

accede a miembros, e.j. args.Length

" (<tipo>) "[

] ndice de arrays, punteros, propiedades y atributos : crea nuevos objetos : obtiene el tipo de un objeto

" new

" .GetType() " is

: compara el tipo de un objeto : obtiene el tamao de un tipo en bytes

" sizeof

! !

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

Asociatividad:
" Todos " Los

los operadores binarios, salvo los de asignacin, son asociativos por la izquierda. operadores de asignacin y el operador condicional(?) son asociativos por la derecha.

ndice
! ! !

Introduccin Estructura de los programas Variables y Tipos de Datos


" " " " " "

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

Operadores y expresiones

Control del flujo


" " "

Condicionales Bucles Saltos

! !

Funciones y Mtodos Depuracin y Tratamiento de Errores

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
{ int i; ... { int i; ... }

"

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; ...
...

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

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

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 (cartas == 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;] }

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

"

Condicionales mltiples (cont)


!

! !

Las opciones tienen que ser expresiones constantes, nunca variables. El orden de las opciones no importa y no pueden estar repetidas. En C# se permite usar en el switch el tipo string

Ejemplo:

string country; const string england = "uk"; const string britain = "uk"; const string spain = "sp"; const string german = "ge"; switch(country) { case england: ; break; case britain: ; break // error de compilacin case spain: ; break case german: ; break }

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 (true) { ... }

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

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

" do

... while ! Ejecuta instrucciones en funcin de un valor booleano. ! Evala la expresin booleana al final del bucle.
do { ... } while (true); int i = 10; do { ... i--; } while (i > 5);

int i = 0; do { Console.WriteLine(i); i++; 0 1 2 3 4 5 6 7 8 9 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 static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); }

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

for (int i=1; i<=5; i++) { if (i==3) break; Console.WriteLine(i); }

: Sale directamente de un bucle sin acabarlo:

" return [<expresin>]: Sale del mtodo actual

ndice
! ! !

Introduccin Estructura de los programas Variables y Tipos de Datos


" " " " " "

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

! !

Operadores y expresiones Control del flujo


Condicionales " Bucles " Saltos
"

! !

Funciones y Mtodos Depuracin y Tratamiento de Errores

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( ) { // ... } }

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 los mtodos de la clase. Conflictos de mbito " El compilador no avisa si hay conflictos entre nombres de las variables locales y las de clase.

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 int DosMasDos( ) { int a,b; a = 2; b = 2; return a + b; } int x; x = DosMasDos( ); 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.
MetodoConParametros(int n, string y)

static void { ... }

MetodoConParametros(2, "Hola, mundo");

" 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.

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

" 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 int RaizCuarta(ref int x) { x = (int)Math.Sqrt(x); return (int)Math.Sqrt(x); } static void Main( ) { int num = 625; //siempre inicializar antes de utilizarla!! Console.WriteLine(Raiz cuarta: {0}, el nmero original es: {1}, RaizCuarta(ref num), num); }

" 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 void OutDemo(out int p) { p = 255; // ... } static void Main( ) { int n; // sin inicializar 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 long SumaLista(params long[ ] v) { long total, i; for (i = 0, total = 0; i < v.Length; i++) total += v[i]; return total; } static void Main( ) { long x = 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.

" Devolucin

de arrays desde mtodos:

class EjemploArr1 { static void Main( ) { int[ ] array = CrearArray(42); ... } static int[ ] CrearArray(int tamano) { int[ ] creada = new int[tamano]; return 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 EjemploArr2 { static void Main( ) { int[ ] arg = {10, 9, 8, 7}; Metodo(arg); System.Console.WriteLine(arg[0]); } static void Metodo(int[ ] parametro) { parametro[0]++; }
Este mtodo modificar el array original creado en Main

Mtodos recursivos
" "

Hacen llamadas a s mismos til para resolver ciertos problemas

static ulong Fibonacci(ulong n) { if (n <= 2) return 1; else return Fibonacci(n-1) + 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.

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

ndice
! ! !

Introduccin Estructura de los programas Variables y Tipos de Datos


" " " " " "

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

! !

Operadores y expresiones Control del flujo


Condicionales " Bucles " Saltos
"

! !

Funciones y Mtodos Depuracin y Tratamiento de Errores

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.

Excepciones
" Las

excepciones son el mecanismo OO de C# para controlar las situaciones de error. qu usar excepciones? El tratamiento tradicional de errores resulta muy complicado de gestionar:

" por

Lgica del programa

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

Trat. De errores

"

Todas las excepciones derivan de System.Exception


Excepciones de .NET Base Class Library

" Tratamiento
try { ... } catch { ... } finally { ... }

de excepciones orientado a objetos :


// bloque normal de cdigo

// bloque que controla la excepcin

// bloque de finalizacin que siempre se ejecuta // Permite limpiar recursos utilizados por try

Ejemplo:
try { Console.WriteLine("Escriba un nmero"); int i = int.Parse(Console.ReadLine()); } catch (OverflowException capturada)

{ Console.WriteLine(capturada); }

" " "

Cuando ocurre un error se crea una excepcin que contiene informacin para solucionar el problema. Cada bloque catch captura una clase de excepcin. Un bloque try puede tener un bloque catch general que capture excepciones no tratadas (slo uno y adems el ltimo de los bloques catch) Un bloque try no puede capturar una excepcin derivada de una clase capturada en un bloque catch anterior.
try { Console.WriteLine(Escriba el primer nmero"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("Escriba el segundo nmero"); int j = int.Parse(Console.ReadLine()); int k = i / j; } catch (OverflowException capturada) { Console.WriteLine(capturada); } catch (DivideByZeroException capturada) {Console.WriteLine(capturada); } catch {} // tambin: catch (Exception x) { } ...

"

Potrebbero piacerti anche