SlideShare una empresa de Scribd logo
Introducción a C#.Net
El lenguaje C# El último en una línea de evolución de los lenguajes derivados de C, que incluye C++ y Java Usado por Microsoft para desarrollar la mayoría del código de .NET Creada con .NET en mente, por tanto es el lenguaje ideal para el desarrollo en .NET C# introduce varias mejoras sobre C++ en las áreas de seguridad de datos, versionamiento, eventos y recolección de basura C# provee acceso a SO y COM APIs y soporta el modo  unsafe  que permite el uso de punteros como en C Más simple que C++ pero tan poderoso y flexible
Estructura de un programa C# I Un programa en C# contiene: Uno o más ficheros los cuales contienen: Uno o más espacios de nombres que contienen: Tipos de datos: clases, estructuras, interfaces, enumeraciones y delegates Un  delegate  es una referencia a un método, similar a un puntero a función en C++, se suelen usar para implementar manejadores de eventos y callbacks Si no se declara un namespace se asume el global por defecto Un programa ejecutable ha de contener obligatoriamente una función Main static void Main() static int Main() static void Main(string[] args) static int Main(string[] args)
Estructura de un programa C# II namespace N1 { class C1 { // ... } struct S1 { // ... } interface I1 { // ... } delegate int D1(); enum E1 { // ... } }
Identificadores Identificadores: Se usan para dar nombres a elementos de un programa como variables, constantes y métodos Consta de caracteres alfanuméricos y ‘_’, es sensible a mayúsculas y minúsculas, debe comenzar con letra o ‘_’ Si se quiere usar un identificador como palabra clave hay que usar como prefijo el carácter ‘@’: Object @this; // prevenir conflicto con "this"
Variables I Una variable en C# representa la localización en memoria donde una instancia de un tipo es guardada Recordar distinción entre tipos por valor y por referencia Tipos por valor son tipos simples como ‘ int ’, ‘ long ’ y ‘ char ’ Los objetos, strings y arrays son ejemplos de tipos por referencia
Variables II Las variables por valor  pueden declararse e iniciarse: bool bln = true; byte byt1 = 22; char ch1=‘x’, ch2=‘\u0066’; // 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;
Variables III Los valores por referencia son creados con la palabra clave new: object o = new System.Object(); Strings se pueden 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 línea string s2 = "Hola\tque\ttal"; // tabulador Como las sentencias de escape comienzan con ‘\’, para escribir este carácter hay que doblarlo, o usar ‘@’: string s3 = "c:\\WINNT";  string s4 = @"C:\WINNT";
Constantes C# provee el modificador  const  que se puede usar para crear constantes de programas: const int min = 1; const int max = 100; Const int range = max – min;
Arrays Los arrays son tipos por referencia y sus índices comienzan en 0: string[] a; El tipo de datos 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[] a1 = {"gato", "perro", "caballo"} int[] a2 = {1, 2, 3}; Puede haber arrays multidimensionales y arrays de arrays: string[,] ar = {{"perro", "conejo"}, {"gato", "caballo"}} int[][] matrix; object[] ar  = {3, "cat", 2.45}; // Los elementos de un array mismo tipo string animal=(string)ar[1];
Expresiones y Operadores I Las expresiones en C# son muy similares a las de C y C++ Operadores aritméticos: +  , Suma unaria ,  +a -  , Resta unaria,  -a ++ , Incremento,  ++a o a++ -- , Decremento,  --a  o  a-- + , Suma,  a+b - , Resta,  a-b * , Multiplicación,  a*b / , División,  a/b
Expresiones y Operadores II Operadores relacionales: ==  , Igualdad ,  a==b !=  , Inigualdad,  a!=b < , Menor que,  a<b <= , Menor o igual,  a<=b > , Mayor que,  a>b >= , Mayor que o Igual a,  a>=b Los programadores de Visual Basic deben notar que se usa ‘==‘  en vez de ‘=‘ para igualdad, ‘!=‘ para desigualdad en vez de ‘<>’ e ‘=‘ para asignación
Expresiones y Operadores III Operadores relacionales: !  , Negación ,  !a &  , And binario,  a&b | , Or binario,  a|b ^ , Or exclusivo,  a^b ~ , Negaci ón binaria ,  ~a && , And l ógico ,  a&&b || , Or l ógico ,  a||b
Expresiones y Operadores IV Operadores de asignación (para  a==3  y  b==7 ): =  , a=b ,  7 +=  , a+=b,  10 -= , a-=b,  -4 *= , a*=b,  21 /= , a/=b,  0
Expresiones y Operadores V Otros operadores: min=a<b ? a:b; // if a<b min=a else min=b; .    para acceso a miembros, e.j. args.Length ()    para conversión de tipos []    como índice de arrays, punteros, propiedades y atributos new    para crear nuevos objetos typeof    para obtener el tipo de un objeto is    para comparar el tipo de un objeto en runtime sizeof    para obtener el tamaño de un tipo en bytes *    para obtener la variable a la que apunta un puntero ->, p->m es lo mismo que (*).m &    devuelve la dirección de un operando Precedencia de operadores, asociatividad y uso de ()
Sentencias en C# I Las sentencias pueden ocupar más de una línea y deben terminarse con un ; Grupos de sentencias se pueden agrupar en bloques con { y } E.j: int i, j; // un sentencia simple i=1; // un bloque de sentencias { j=2; i=i+j; }
Sentencias en C# II if , sirve para saltar en base a una condición: if (i<5) // una sentencia sólo parte if System.Console.WriteLine(&quot;i < 5&quot;); if (i<5) // una sentencia con parte if y else System.Console.WriteLine(&quot;i<5&quot;); else System.Console.WriteLine(&quot;i>=5); if (i<5) { // bloque de sentencias con parte if y else System.Console.WriteLine(&quot;i<5&quot;); System.Console.WriteLine(&quot;i es más pequeño&quot;); } else { System.Console.WriteLine(&quot;i>=5&quot;); System.Console.WriteLine(&quot;i NO es más pequeño&quot;); } min=a<b ? a:b; // if a<b min=a else min=b; .    para acceso a miembros, e.j. args.Length ()    para conversión de tipos []    como índice de arrays, punteros, propiedades y atributos new    para crear nuevos objetos Typeof    para obtener el tipo de un objeto Is    para comparar el tipo de un objeto en runtime Sizeof    para obtener el tamaño de un tipo en bytes *    para obtener la variable a la que apunta un puntero ->, p->m es lo mismo que (*).m &    devuelve la dirección de un operando Precedencia de operadores, asociatividad y uso de ()
Sentencias en C# III do , sirve para repeticiones de sentencia que se ejecutan al menos una vez: int i=1; do System.Console.WriteLine(i++); While (i<=5); while, para repeticiones de 0 a N veces int i=1; While (i<=5) System.Console.WriteLine(i++);
Sentencias en C# IV for, se usa cuando el número de repeticiones se conoce a priori for (int i=1; i<=5; i++) System.Console.WriteLine(i); // Visualiza digitos 1 a 5 La primera expresión es de inicialización, declara un entero La segunda la condición del bucle La tercera es la expresión del iterador Un bucle infinito se podría codificar como: for (;;) { // bucle infinito ... } Se pueden insertar múltiples expresiones: for (int i=1, j=2; i<=5; i++, j+=2) { System.Console.WriteLine(&quot;i=&quot; + i + &quot;, j=&quot; + j); }
Sentencias en C# V continue, se usa para saltar el resto de la iteración y comenzar la siguiente for (int i=1; i<=5; i++) { if (i==3) continue; System.Console.WriteLine(i); } break se usa para salir de un bucle: for (int i=1; i<=5; i++) { if (i==3) break; System.Console.WriteLine(i); }
Sentencias en C# VI Sirve para seleccionar entre múltiples opciones posibles uint i=2; switch(i) { case 0: goto case 2; // para permitir varios casos usar goto case 1: goto case 2;  case 2: System.Console.WriteLine(&quot;i<3&quot;); break; // el uso de goto o break es obligatorio case 3: System.Console.WriteLine(&quot;i==3&quot;), break; default: System.Console.WriteLine(&quot;i>3&quot;); break; }
Sentencias en C# VII foreach representa un interesante caso para iterar sobre un array: int[] arr = {2, 4, 6, 8}; foreach (int contenido in arr) // Visualizará 2, 4, 6 y 8 System.Console.WriteLine(contenido); return termina la ejecución del método actual y devuelve control al invocador class Add { // devuelve resultado de sumar 2 enteros public static void Main() { System.Console.WriteLine(&quot;2+3=&quot; + add(2,3)); }  private static int add(int i, int j) { return i+j; } }
Sentencias en C# VIII goto transfiere control a una instrucción que contiene una etiqueta using System; public class EjemploGoto { public static void Main(string [] args) { if (args.Length == 0) { Console.WriteLine(&quot;No se han pasado args&quot;); goto end; } Console.WriteLine(&quot;El primer argumento es &quot; + args[0]); end: return; } } throw sirve para lanzar una excepción if (val > max) throw new Exception(&quot;Valor excede máximo&quot;);
Clases y estructuras I El bloque principal de construcción de bloques en C# es class using System; class Persona { // campos string apellido1, nombre; // private string apellido1, nombre;  int edad; // constructor public Persona(string apellido1, string nombre, int edad) { this.apellido1 = apellido1; this.nombre = nombre; this.edad = edad; } // método public void VerNombre() { Console.WriteLine(this.nombre + &quot; &quot; + this.apellido1); }
Clases y estructuras II public int Edad { get { return edad; } set { edad = value; } } public string Apellido1 { get { return apellido1; } } } class Test { public static void Main()  { Persona p = new Persona(&quot;Diego&quot;, &quot;Ipiña&quot;, 29); p.VerNombre(); Console.WriteLine(&quot;La edad es &quot; + p.Edad); Console.WriteLine(&quot;El apellido es &quot; + p.Apellido1); p.Edad = 30; Console.WriteLine(&quot;La edad es ahora &quot; + p.Edad); } }
Clases y estructuras III Definimos una clase usando la palabra clave  class  seguida del nombre de la clase y el cuerpo de la clase entre { y } Los miembros que una clase puede contener son: Campos  Métodos  Propiedades El constructor ( Persona() ) tiene el mismo nombre que la clase y no devuelve ningún valor La palabra clave  this  se usa para referenciar a la instancia de la clase actual C# soporta punteros cuando funciona en modo inseguro, se usa la palabra clave  unsafe  para preceder a este tipo de datos
Propiedades C# provee propiedades para recuperar ( get ) y modificar ( set ) campos de una clase: public int Height { get { return height; } set {  if (value > 0) height = value; else throw new ArgumentOutOfRangeException(“Altura debe ser 1 o mayor”); } } Dentro de un atributo set C# provee la variable  value Tanto los campos, como atributos y métodos pueden ir acompañados de modificadores  ( public ). Si se omite un modificador entonces los miembros son privados La convención es hacer que miembros privados empiecen por minúscula, mientras que todos los demás lo hagan por mayúscula
Clases y estructuras Un miembro  static  puede ser accedido sin crear una instancia de una clase (se suelen usar para guardar valores globales) class Persona { public static int MinimumAge = 18; … } int age = Persona.MinimumAge; // accedemos a MinimumAge usando nombre clase Las clases se pueden anidar: class C1 { int i, j;  string s; void m() {  // …  } class c2 { // … } }
Clases y estructuras Se pueden crear clases ligeras usando una estructura ( struct ) Las estructuras son tipos por valor y se guardan en la pila Más eficientes, no requieren referencias y no hay garbage collection struct Point { public int X, Y; public Point(int x, int y) { X = x; Y = y; } } … }
Más sobre métodos I Los métodos aceptan parámetros y devuelven un resultado int Add(int x, int y) { return x+y; } Los parámetros x e y se pasan por valor, se recibe una copia de ellos
Más sobre métodos II Para pasar un numero variable de parámetros se usa  params : class Adder { int Add(params int[] ints) { int sum=0; foreach(int i in ints) sum+=i; return sum; } public static void Main() { Adder a = new Adder(); int sum = a.Add(1, 2, 3, 4, 5); System.Console.WriteLine(sum); // visualiza &quot;15&quot; } }
Más sobre métodos III Métodos de sobrecarga, es decir, métodos con el mismo nombre, con firmas (número y tipo de parámetros) diferentes: class Persona { string nombre, apellido1, apellido2; public Persona(string nombre, string apellido1) { this.nombre = nombre; this.apellido1 = apellido1; } public Persona(string nombre, string apellido1, string apellido2) { this.nombre = nombre; this.apellido1 = apellido1; this.apellido2 = apellido2; } } Persona p1 = new Persona(&quot;Diego&quot;, &quot;Ipiña&quot;); Persona p2 = new Persona(&quot;Diego&quot;, &quot;Ipiña&quot;, &quot;Artaza&quot;);
Modificadores de acceso Los modificadores de acceso controlan la visibilidad de los miembros de una clase private , sólo código dentro de la misma clase contenedora tiene acceso a un miembro privado. Es el modo de acceso por defecto. public  , visible a todos los usuarios de una clase protected , miembros accesibles tanto por dentro de la clase como en clases derivadas internal , miembros accesibles sólo dentro de un assembly protected internal , permite acceso protected e internal
Excepciones  Modo recomendado para manejar errores excepcionales en C# Todas las excepciones definidas derivan de System.Exception System.Exception  define una serie de propiedades comunes a todas las excepciones: Message : contiene un mensaje de error indicando que ha ido mal StackTrace : detalla los detalles de la llamada que produjo la excepción Para distinguir entre excepciones lanzadas por la framework y excepciones generadas por aplicaciones, estas últimas se recomienda deriven de  System.ApplicationException
Algunas excepciones comunes ArgumentNullException     una referencia nula es pasada como argumento ArgumentOutOfRangeException     nos hemos salido de rango, e.j. entero demasiado grande DividedByZeroException IndexOutOfRangeException     se usa un índice inválidado del array InvalidCastException NullReferenceException     se intenta invocar un método en un objeto que es null OutOfMemoryException
Ejemplo excepciones I using System; class Persona { string nombre, apellido1; int edad; public Persona(string nombre, string apellido1, int edad) { this.nombre = nombre; this.apellido1 = apellido1; this.edad = edad; if (edad < 18) // La edad debe ser mayor que 18 sino excepción   throw new Exception(&quot;ERROR: Persona debajo edad legal&quot;); this.edad = edad; } }
Ejemplo Excepciones II class Test { public static void Main() { try { Persona p = new Persona(&quot;Diego, &quot;Ipiña&quot;, 12); } catch (Exception e) { // capturar excepción lanzada Console.WriteLine(e.Message); } } Se puede incluir un bloque finally también, para asegurarnos que recursos abiertos son cerrados: try { ... } catch { ... } finally { ... }

Más contenido relacionado

PPT
Introducción a C SHARP
PDF
Ejercicios punteros cadenas-vectores
PPT
Tipos de datos en C
PPS
PDF
Clase 11- fundamentos de la programacion
PPTX
Lenguaje C para Administradores de Red - Script II Punteros
PPT
2 punteros y lenguaje c
Introducción a C SHARP
Ejercicios punteros cadenas-vectores
Tipos de datos en C
Clase 11- fundamentos de la programacion
Lenguaje C para Administradores de Red - Script II Punteros
2 punteros y lenguaje c

La actualidad más candente (20)

PPTX
TIPOS DE DATOS PARA C++
PPTX
Programación en c (iii parte)
PPT
Operaciones Basicas C++
PDF
Chuleta de lenguaje C para principiantes
PPTX
Arreglo de punteros
PDF
08 - Punteros en lenguaje C
PDF
Ejemplos c
DOCX
Apuntadores
PPT
Lenguaje
PDF
Algoritmos y lenjuage de programacion
PPT
Elementos Basicos del Lenguaje C++
PDF
Clase 5
PPT
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
PPT
Introduccion a c++
DOCX
Tutorial C++
PDF
Teoria punteros
DOCX
Fundamentos de programación librería string C++
PPSX
Lenguajes diapositivas
PPSX
Lenguaje C para Administradores de Red - Script I
PDF
03 - Entrada y salida en lenguaje C
TIPOS DE DATOS PARA C++
Programación en c (iii parte)
Operaciones Basicas C++
Chuleta de lenguaje C para principiantes
Arreglo de punteros
08 - Punteros en lenguaje C
Ejemplos c
Apuntadores
Lenguaje
Algoritmos y lenjuage de programacion
Elementos Basicos del Lenguaje C++
Clase 5
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Introduccion a c++
Tutorial C++
Teoria punteros
Fundamentos de programación librería string C++
Lenguajes diapositivas
Lenguaje C para Administradores de Red - Script I
03 - Entrada y salida en lenguaje C
Publicidad

Destacado (6)

PDF
Introduction to ASP.NET Core with Visual Studio 2017
PDF
Certificate C# Fundamentals for Absolute Beginners
PPTX
Conectar sql-c-sharp- muy bueno
PDF
Introduccion a Visual C Sharp
PPT
Programacion c# vbnet
PDF
Programación Funcional en JavaScript
Introduction to ASP.NET Core with Visual Studio 2017
Certificate C# Fundamentals for Absolute Beginners
Conectar sql-c-sharp- muy bueno
Introduccion a Visual C Sharp
Programacion c# vbnet
Programación Funcional en JavaScript
Publicidad

Similar a C sharp intro0 (20)

PPT
Lenguajecviviana
DOC
Resumen lenguajes c#
PPT
1. introducción a c#
PPT
IntroduccióN A Visual C
PPT
IntroduccióN A Visual C
PPT
Presentación de c #
PPT
Programacion C#_vbnet
PPT
Dce0 programacion oo_c#_vbnet
PPT
Dce0 programacion oo_c#_vbnet
DOCX
Programacion C#
PPT
2. Introduccion A C#
PPT
2. Introduccion A C#
PPTX
Guia de ejercioccios de estudio c#.pptx
PDF
Clase 1.pdf
PDF
Reporte_de_microsoft_visual_c#
Lenguajecviviana
Resumen lenguajes c#
1. introducción a c#
IntroduccióN A Visual C
IntroduccióN A Visual C
Presentación de c #
Programacion C#_vbnet
Dce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnet
Programacion C#
2. Introduccion A C#
2. Introduccion A C#
Guia de ejercioccios de estudio c#.pptx
Clase 1.pdf
Reporte_de_microsoft_visual_c#

Más de Colegio Agropecuario de San Carlos (20)

PPT
Desarrollo sitios web
DOC
Lenguajes de programacion web
DOC
DOCX
Tipos de certificaciones profesionales en informática
PPTX
PPT
Sistemas operativos 1
PPT
Servicios de sistemas
PPTX
Planificador del procesador
PPT
Tipos sitemas operativos
PPT
Intrefaz gráfica de usuario
PPT
Intrefaz gráfica de usuario

C sharp intro0

  • 2. El lenguaje C# El último en una línea de evolución de los lenguajes derivados de C, que incluye C++ y Java Usado por Microsoft para desarrollar la mayoría del código de .NET Creada con .NET en mente, por tanto es el lenguaje ideal para el desarrollo en .NET C# introduce varias mejoras sobre C++ en las áreas de seguridad de datos, versionamiento, eventos y recolección de basura C# provee acceso a SO y COM APIs y soporta el modo unsafe que permite el uso de punteros como en C Más simple que C++ pero tan poderoso y flexible
  • 3. Estructura de un programa C# I Un programa en C# contiene: Uno o más ficheros los cuales contienen: Uno o más espacios de nombres que contienen: Tipos de datos: clases, estructuras, interfaces, enumeraciones y delegates Un delegate es una referencia a un método, similar a un puntero a función en C++, se suelen usar para implementar manejadores de eventos y callbacks Si no se declara un namespace se asume el global por defecto Un programa ejecutable ha de contener obligatoriamente una función Main static void Main() static int Main() static void Main(string[] args) static int Main(string[] args)
  • 4. Estructura de un programa C# II namespace N1 { class C1 { // ... } struct S1 { // ... } interface I1 { // ... } delegate int D1(); enum E1 { // ... } }
  • 5. Identificadores Identificadores: Se usan para dar nombres a elementos de un programa como variables, constantes y métodos Consta de caracteres alfanuméricos y ‘_’, es sensible a mayúsculas y minúsculas, debe comenzar con letra o ‘_’ Si se quiere usar un identificador como palabra clave hay que usar como prefijo el carácter ‘@’: Object @this; // prevenir conflicto con &quot;this&quot;
  • 6. Variables I Una variable en C# representa la localización en memoria donde una instancia de un tipo es guardada Recordar distinción entre tipos por valor y por referencia Tipos por valor son tipos simples como ‘ int ’, ‘ long ’ y ‘ char ’ Los objetos, strings y arrays son ejemplos de tipos por referencia
  • 7. Variables II Las variables por valor pueden declararse e iniciarse: bool bln = true; byte byt1 = 22; char ch1=‘x’, ch2=‘\u0066’; // 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;
  • 8. Variables III Los valores por referencia son creados con la palabra clave new: object o = new System.Object(); Strings se pueden inicializar directamente: string s = &quot;Hola&quot;; // usan caracteres Unicode de 2 cars C# soporta secuencias de escape como en C: string s1 = &quot;Hola\n&quot;; // salto de línea string s2 = &quot;Hola\tque\ttal&quot;; // tabulador Como las sentencias de escape comienzan con ‘\’, para escribir este carácter hay que doblarlo, o usar ‘@’: string s3 = &quot;c:\\WINNT&quot;; string s4 = @&quot;C:\WINNT&quot;;
  • 9. Constantes C# provee el modificador const que se puede usar para crear constantes de programas: const int min = 1; const int max = 100; Const int range = max – min;
  • 10. Arrays Los arrays son tipos por referencia y sus índices comienzan en 0: string[] a; El tipo de datos 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[] a1 = {&quot;gato&quot;, &quot;perro&quot;, &quot;caballo&quot;} int[] a2 = {1, 2, 3}; Puede haber arrays multidimensionales y arrays de arrays: string[,] ar = {{&quot;perro&quot;, &quot;conejo&quot;}, {&quot;gato&quot;, &quot;caballo&quot;}} int[][] matrix; object[] ar = {3, &quot;cat&quot;, 2.45}; // Los elementos de un array mismo tipo string animal=(string)ar[1];
  • 11. Expresiones y Operadores I Las expresiones en C# son muy similares a las de C y C++ Operadores aritméticos: + , Suma unaria , +a - , Resta unaria, -a ++ , Incremento, ++a o a++ -- , Decremento, --a o a-- + , Suma, a+b - , Resta, a-b * , Multiplicación, a*b / , División, a/b
  • 12. Expresiones y Operadores II Operadores relacionales: == , Igualdad , a==b != , Inigualdad, a!=b < , Menor que, a<b <= , Menor o igual, a<=b > , Mayor que, a>b >= , Mayor que o Igual a, a>=b Los programadores de Visual Basic deben notar que se usa ‘==‘ en vez de ‘=‘ para igualdad, ‘!=‘ para desigualdad en vez de ‘<>’ e ‘=‘ para asignación
  • 13. Expresiones y Operadores III Operadores relacionales: ! , Negación , !a & , And binario, a&b | , Or binario, a|b ^ , Or exclusivo, a^b ~ , Negaci ón binaria , ~a && , And l ógico , a&&b || , Or l ógico , a||b
  • 14. Expresiones y Operadores IV Operadores de asignación (para a==3 y b==7 ): = , a=b , 7 += , a+=b, 10 -= , a-=b, -4 *= , a*=b, 21 /= , a/=b, 0
  • 15. Expresiones y Operadores V Otros operadores: min=a<b ? a:b; // if a<b min=a else min=b; .  para acceso a miembros, e.j. args.Length ()  para conversión de tipos []  como índice de arrays, punteros, propiedades y atributos new  para crear nuevos objetos typeof  para obtener el tipo de un objeto is  para comparar el tipo de un objeto en runtime sizeof  para obtener el tamaño de un tipo en bytes *  para obtener la variable a la que apunta un puntero ->, p->m es lo mismo que (*).m &  devuelve la dirección de un operando Precedencia de operadores, asociatividad y uso de ()
  • 16. Sentencias en C# I Las sentencias pueden ocupar más de una línea y deben terminarse con un ; Grupos de sentencias se pueden agrupar en bloques con { y } E.j: int i, j; // un sentencia simple i=1; // un bloque de sentencias { j=2; i=i+j; }
  • 17. Sentencias en C# II if , sirve para saltar en base a una condición: if (i<5) // una sentencia sólo parte if System.Console.WriteLine(&quot;i < 5&quot;); if (i<5) // una sentencia con parte if y else System.Console.WriteLine(&quot;i<5&quot;); else System.Console.WriteLine(&quot;i>=5); if (i<5) { // bloque de sentencias con parte if y else System.Console.WriteLine(&quot;i<5&quot;); System.Console.WriteLine(&quot;i es más pequeño&quot;); } else { System.Console.WriteLine(&quot;i>=5&quot;); System.Console.WriteLine(&quot;i NO es más pequeño&quot;); } min=a<b ? a:b; // if a<b min=a else min=b; .  para acceso a miembros, e.j. args.Length ()  para conversión de tipos []  como índice de arrays, punteros, propiedades y atributos new  para crear nuevos objetos Typeof  para obtener el tipo de un objeto Is  para comparar el tipo de un objeto en runtime Sizeof  para obtener el tamaño de un tipo en bytes *  para obtener la variable a la que apunta un puntero ->, p->m es lo mismo que (*).m &  devuelve la dirección de un operando Precedencia de operadores, asociatividad y uso de ()
  • 18. Sentencias en C# III do , sirve para repeticiones de sentencia que se ejecutan al menos una vez: int i=1; do System.Console.WriteLine(i++); While (i<=5); while, para repeticiones de 0 a N veces int i=1; While (i<=5) System.Console.WriteLine(i++);
  • 19. Sentencias en C# IV for, se usa cuando el número de repeticiones se conoce a priori for (int i=1; i<=5; i++) System.Console.WriteLine(i); // Visualiza digitos 1 a 5 La primera expresión es de inicialización, declara un entero La segunda la condición del bucle La tercera es la expresión del iterador Un bucle infinito se podría codificar como: for (;;) { // bucle infinito ... } Se pueden insertar múltiples expresiones: for (int i=1, j=2; i<=5; i++, j+=2) { System.Console.WriteLine(&quot;i=&quot; + i + &quot;, j=&quot; + j); }
  • 20. Sentencias en C# V continue, se usa para saltar el resto de la iteración y comenzar la siguiente for (int i=1; i<=5; i++) { if (i==3) continue; System.Console.WriteLine(i); } break se usa para salir de un bucle: for (int i=1; i<=5; i++) { if (i==3) break; System.Console.WriteLine(i); }
  • 21. Sentencias en C# VI Sirve para seleccionar entre múltiples opciones posibles uint i=2; switch(i) { case 0: goto case 2; // para permitir varios casos usar goto case 1: goto case 2; case 2: System.Console.WriteLine(&quot;i<3&quot;); break; // el uso de goto o break es obligatorio case 3: System.Console.WriteLine(&quot;i==3&quot;), break; default: System.Console.WriteLine(&quot;i>3&quot;); break; }
  • 22. Sentencias en C# VII foreach representa un interesante caso para iterar sobre un array: int[] arr = {2, 4, 6, 8}; foreach (int contenido in arr) // Visualizará 2, 4, 6 y 8 System.Console.WriteLine(contenido); return termina la ejecución del método actual y devuelve control al invocador class Add { // devuelve resultado de sumar 2 enteros public static void Main() { System.Console.WriteLine(&quot;2+3=&quot; + add(2,3)); } private static int add(int i, int j) { return i+j; } }
  • 23. Sentencias en C# VIII goto transfiere control a una instrucción que contiene una etiqueta using System; public class EjemploGoto { public static void Main(string [] args) { if (args.Length == 0) { Console.WriteLine(&quot;No se han pasado args&quot;); goto end; } Console.WriteLine(&quot;El primer argumento es &quot; + args[0]); end: return; } } throw sirve para lanzar una excepción if (val > max) throw new Exception(&quot;Valor excede máximo&quot;);
  • 24. Clases y estructuras I El bloque principal de construcción de bloques en C# es class using System; class Persona { // campos string apellido1, nombre; // private string apellido1, nombre; int edad; // constructor public Persona(string apellido1, string nombre, int edad) { this.apellido1 = apellido1; this.nombre = nombre; this.edad = edad; } // método public void VerNombre() { Console.WriteLine(this.nombre + &quot; &quot; + this.apellido1); }
  • 25. Clases y estructuras II public int Edad { get { return edad; } set { edad = value; } } public string Apellido1 { get { return apellido1; } } } class Test { public static void Main() { Persona p = new Persona(&quot;Diego&quot;, &quot;Ipiña&quot;, 29); p.VerNombre(); Console.WriteLine(&quot;La edad es &quot; + p.Edad); Console.WriteLine(&quot;El apellido es &quot; + p.Apellido1); p.Edad = 30; Console.WriteLine(&quot;La edad es ahora &quot; + p.Edad); } }
  • 26. Clases y estructuras III Definimos una clase usando la palabra clave class seguida del nombre de la clase y el cuerpo de la clase entre { y } Los miembros que una clase puede contener son: Campos Métodos Propiedades El constructor ( Persona() ) tiene el mismo nombre que la clase y no devuelve ningún valor La palabra clave this se usa para referenciar a la instancia de la clase actual C# soporta punteros cuando funciona en modo inseguro, se usa la palabra clave unsafe para preceder a este tipo de datos
  • 27. Propiedades C# provee propiedades para recuperar ( get ) y modificar ( set ) campos de una clase: public int Height { get { return height; } set { if (value > 0) height = value; else throw new ArgumentOutOfRangeException(“Altura debe ser 1 o mayor”); } } Dentro de un atributo set C# provee la variable value Tanto los campos, como atributos y métodos pueden ir acompañados de modificadores ( public ). Si se omite un modificador entonces los miembros son privados La convención es hacer que miembros privados empiecen por minúscula, mientras que todos los demás lo hagan por mayúscula
  • 28. Clases y estructuras Un miembro static puede ser accedido sin crear una instancia de una clase (se suelen usar para guardar valores globales) class Persona { public static int MinimumAge = 18; … } int age = Persona.MinimumAge; // accedemos a MinimumAge usando nombre clase Las clases se pueden anidar: class C1 { int i, j; string s; void m() { // … } class c2 { // … } }
  • 29. Clases y estructuras Se pueden crear clases ligeras usando una estructura ( struct ) Las estructuras son tipos por valor y se guardan en la pila Más eficientes, no requieren referencias y no hay garbage collection struct Point { public int X, Y; public Point(int x, int y) { X = x; Y = y; } } … }
  • 30. Más sobre métodos I Los métodos aceptan parámetros y devuelven un resultado int Add(int x, int y) { return x+y; } Los parámetros x e y se pasan por valor, se recibe una copia de ellos
  • 31. Más sobre métodos II Para pasar un numero variable de parámetros se usa params : class Adder { int Add(params int[] ints) { int sum=0; foreach(int i in ints) sum+=i; return sum; } public static void Main() { Adder a = new Adder(); int sum = a.Add(1, 2, 3, 4, 5); System.Console.WriteLine(sum); // visualiza &quot;15&quot; } }
  • 32. Más sobre métodos III Métodos de sobrecarga, es decir, métodos con el mismo nombre, con firmas (número y tipo de parámetros) diferentes: class Persona { string nombre, apellido1, apellido2; public Persona(string nombre, string apellido1) { this.nombre = nombre; this.apellido1 = apellido1; } public Persona(string nombre, string apellido1, string apellido2) { this.nombre = nombre; this.apellido1 = apellido1; this.apellido2 = apellido2; } } Persona p1 = new Persona(&quot;Diego&quot;, &quot;Ipiña&quot;); Persona p2 = new Persona(&quot;Diego&quot;, &quot;Ipiña&quot;, &quot;Artaza&quot;);
  • 33. Modificadores de acceso Los modificadores de acceso controlan la visibilidad de los miembros de una clase private , sólo código dentro de la misma clase contenedora tiene acceso a un miembro privado. Es el modo de acceso por defecto. public , visible a todos los usuarios de una clase protected , miembros accesibles tanto por dentro de la clase como en clases derivadas internal , miembros accesibles sólo dentro de un assembly protected internal , permite acceso protected e internal
  • 34. Excepciones Modo recomendado para manejar errores excepcionales en C# Todas las excepciones definidas derivan de System.Exception System.Exception define una serie de propiedades comunes a todas las excepciones: Message : contiene un mensaje de error indicando que ha ido mal StackTrace : detalla los detalles de la llamada que produjo la excepción Para distinguir entre excepciones lanzadas por la framework y excepciones generadas por aplicaciones, estas últimas se recomienda deriven de System.ApplicationException
  • 35. Algunas excepciones comunes ArgumentNullException  una referencia nula es pasada como argumento ArgumentOutOfRangeException  nos hemos salido de rango, e.j. entero demasiado grande DividedByZeroException IndexOutOfRangeException  se usa un índice inválidado del array InvalidCastException NullReferenceException  se intenta invocar un método en un objeto que es null OutOfMemoryException
  • 36. Ejemplo excepciones I using System; class Persona { string nombre, apellido1; int edad; public Persona(string nombre, string apellido1, int edad) { this.nombre = nombre; this.apellido1 = apellido1; this.edad = edad; if (edad < 18) // La edad debe ser mayor que 18 sino excepción throw new Exception(&quot;ERROR: Persona debajo edad legal&quot;); this.edad = edad; } }
  • 37. Ejemplo Excepciones II class Test { public static void Main() { try { Persona p = new Persona(&quot;Diego, &quot;Ipiña&quot;, 12); } catch (Exception e) { // capturar excepción lanzada Console.WriteLine(e.Message); } } Se puede incluir un bloque finally también, para asegurarnos que recursos abiertos son cerrados: try { ... } catch { ... } finally { ... }