Tabla de contenidos. Introducción a la Programación en C#



Documentos relacionados
RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Modulo 1 El lenguaje Java

Elementos léxicos del lenguaje de programación Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Preliminares. Tipos de variables y Expresiones

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Introducción a la programación orientada a objetos

Tema 2. El lenguaje de programación Java (Parte 1)

CONCEPTOS BASICOS DEL LENGUAJE JAVA

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Curso PHP Módulo 1 R-Luis

Tutorial Básico de vbscript

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

2. Estructura de un programa en Java

Java Inicial (20 horas)

Crear una Nueva Solución Vacía:

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Programación Orientada a Objetos con Java

Carmen. Estándares de codificación. Manuel Arias Calleja

8. Sentencia return y métodos

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Introducción al lenguaje de programación java

Programación III. 1. Facultad: Ingeniería Escuela: Computación Asignatura:Programación III I. OBJETIVOS II. INTRODUCCIÓN TEÓRICA

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

FUNDAMENTOS DE PROGRAMACION CON C#

FACULTAD DE INGENIERÍA

Se guardan en archivos con extencion c y los cabezales con extension h

11. Algunas clases estándar de Java (II)

Tema 3 Elementos básicos de programación

GENERACIÓN DE CÓDIGO

! Una variable declarada con final no puede volver a ser reinicializada. numero = 2;! ! Para definir constantes

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Centro de Capacitación en Informática

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Capítulo 9. Archivos de sintaxis

Curso Introducción JAVA Pág.: 1

Tema 5 Sentencias de control de flujo. Fundamentos de Informática

Introducción a la Programación en MATLAB

MATERIAL 2 EXCEL 2007

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Basic Object Oriented Programming (BOOP) Gramática del Lenguaje. Ever Mitta Flores

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

1 Estructura básica de un programa C++

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Introducción a PHP. * No es necesario declarar previamente las variables.

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Creación de Funciones de Conducción

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

Objetivo de aprendizaje del tema

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

1. DML. Las subconsultas

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

1 ELEMENTOS BASICOS DEL LENGUAJE

SISTEMAS DE NUMERACIÓN. Sistema decimal

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Visual Studio 2008 es el conjunto de herramientas de

FACULTAD DE INGENIERÍA

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Fundamentos de la Programación

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN

Repaso de las características más importantes de la programación Java y su adaptación a Android

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

La ventana de Microsoft Excel

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Ejemplos de conversión de reales a enteros

Tema 7: Programación con Matlab

Programación: QBASIC

Estructuras de Sistemas Operativos

Examen escrito de Programación 1

7. Manejo de Archivos en C.

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.

9. Objetos y clases Clases

3.2 Operaciones aritmético-lógicas en Pascal

Introducción al tipo de dato ARRAY

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

SOLUCION EXAMEN junio 2006

Comentario sobre el entorno de desarrollo Microsoft Visual Studio 2005 Juan Manuel Lucas

Anexo B. Comunicaciones entre mc y PC

1: La plataforma.net (.NET Framework)

Creación y administración de grupos de dominio

Contenido. Capítulo 1. Introducción a lenguaje C 1

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

Internet Information Server

Curso de Java POO: Programación orientada a objetos

Prof. Dr. Paul Bustamante

PHP y MySQL. Indice: Switch Bucles For While do...while

Introducción a la Firma Electrónica en MIDAS

Clases y Objetos. Informática II Ingeniería Electrónica

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Transcripción:

Tabla de contenidos 1. INTRODUCCIÓN A.NET...4 1.1. OBJETIVOS...4 1.1.1. Mapa del Curso...4 1.2. QUE ES.NET...5 1.3. QUE ES C# (SHARP)...6 2. ENTORNO DE DESARROLLO...7 2.1. OBJETIVOS...7 2.1.1. Mapa del Curso...7 2.2. EL COMPILADOR...8 2.3. LOS ARCHIVOS FUENTES ( *.CS )...8 2.4. COMO ESTÁ FORMADO EL FRAMEWORK.NET...9 3. SINTAXIS Y SEMÁNTICA DE C#...11 3.1. OBJETIVOS...11 3.1.1. Mapa del Curso...11 3.2. VARIABLES Y CONSTANTES...12 3.2.1. Que es una variable...12 3.2.2. Que es una constante...13 3.3. TIPOS DE DATO...15 3.3.1. Introducción...15 3.3.2. Tipos de datos básicos...18 3.4. CONSTRUCCIONES DEL LENGUAJE...19 3.4.1. Introduccion...19 3.4.2. Sentencias...19 3.4.3. Bloques de código...19 3.5. OPERADORES...21 3.5.1. Que es un operador...21 3.5.2. Que es un Operador?...22 3.5.3. Operaciones aritméticas...22 3.5.4. Operaciones lógicas...22 3.5.5. Operaciones relacionales...23 3.5.6. Operaciones de asignación...23 3.5.7. Operaciones con cadenas...24 3.5.8. Operador condicional...24 3.6. INSTRUCCIONES DE CONTROL DE FLUJO...26 3.6.1. Introduccion...26 3.6.2. Instrucción if...else...27 3.6.3. Instrucción switch...28 3.6.4. Instrucción while...30 3.6.5. Instrucción do...while...32 3.6.6. Instrucción for...33 3.6.7. Instrucción break...35 3.6.8. Instrucción continue...35 3.6.9. Instrucción return...36 3.6.10. Instrucción goto...37 3.7. COMENTARIOS...39 3.7.1. Que es un comentario...39 3.7.2. Utilización de comentarios...39 www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 1

4. ARREGLOS...41 4.1. OBJETIVOS...41 4.1.1. Mapa del Curso...41 4.1.2. Descripción...42 4.1.3. Metas...42 4.2. INTRODUCCION...43 4.3. ARREGLOS DE UNA DIMENSION...43 4.4. OPERACIONES DE ACCESO A ARREGLOS...44 5. INTRODUCCIÓN A LA PROGRAMACIÓN VISUAL...45 5.1. OBJETIVOS...45 5.1.1. Mapa del Curso...45 5.2. QUE ES LA PROGRAMACIÓN VISUAL...46 5.3. LOS WINDOWS FORMS...46 5.4. COMPONENTES...47 5.5. PROPIEDADES...47 5.6. EVENTOS...48 6. LABORATORIOS...49 6.1. OBJETIVOS...49 6.1.1. Mapa del Curso...49 6.2. RECOMENDACIONES...50 6.3. LAB 1 - UTILIZACIÓN DE LA ESTRUCTURA DE CONTROL IF...50 6.3.1. Ejercicio 1...50 6.3.2. Ejercicio 2...50 6.3.3. Ejercicio 3...51 6.4. LAB 2 - UTILIZACIÓN DE LA ESTRUCTURA DE CONTROL WHILE...52 6.4.1. Ejercicio 1...52 6.4.2. Ejercicio 2...52 6.4.3. Ejercicio 3...52 6.4.4. Ejercicio 4...52 6.4.5. Ejercicio 5...52 6.4.6. Ejercicio 6...52 6.4.7. Ejercicio 7...53 6.4.8. Ejercicio 8 BONUS!...53 6.4.9. Ejercicio 9 BONUS!...53 6.5. LAB 3 - UTILIZACIÓN DE LA ESTRUCTURA DE CONTROL FOR...54 6.5.1. Ejercicio 1...54 6.5.2. Ejercicio 2...54 6.5.3. Ejercicio 3...54 6.5.4. Ejercicio 4...54 6.5.5. Ejercicio 5...54 6.5.6. Ejercicio 6...54 6.5.7. Ejercicio 7...55 6.5.8. Ejercicio 8...55 6.5.9. Ejercicio 9...55 6.5.10. Ejercicio 10 BONUS!...56 6.5.11. Ejercicio 11 BONUS!...56 6.6. LAB 4 - UTILIZACIÓN DE VECTORES...57 6.6.1. Ejercicio 1...57 6.6.2. Ejercicio 2...57 6.6.3. Ejercicio 3 BONUS!...58 6.7. LAB 5 INTRODUCCIÓN A INTERFAZ GRAFICA DE USUARIO...59 6.7.1. Ejercicio 1...59 6.7.2. Ejercicio 2...61 www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 2

7. INTRODUCCIÓN AL PARADIGMA DE OBJETOS...62 7.1. OBJETIVOS...62 7.1.1. Mapa del Curso...62 7.1.2. Descripción...63 7.1.3. Metas...63 7.2. ACERCA DE ESTE CAPITULO - IMPORTANTE...64 7.3. CONCEPTOS...64 7.3.1. Introducción...64 7.3.2. Por que Objetos?...65 7.3.3. Objetos como Tipos de Datos...66 7.3.4. Conceptos básicos (clase, objeto, encapsulación)...66 7.3.5. Propiedades (variables)...67 7.3.6. Métodos (funciones)...68 7.4. HERENCIA...69 7.4.1. Introducción...69 7.4.2. Características...70 7.5. VISIBILIDAD...71 7.5.1. Encapsulamiento...71 7.5.2. Miembros Públicos, Privados y Protegidos...71 www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 3

1. Introducción a.net 1.1. Objetivos 1.1.1. Mapa del Curso 1. Introducción a.net 2. Entorno de Desarrollo 3. Sintaxis y Semántica de C# 4. Arreglos 5. Introducción a la Programación Visual 6. Laboratorio 7. Introducción al Paradigma de Objetos www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 4

1.2. Que es.net Realmente, el concepto de.net ( dotnet o punto NET ) es demasiado amplio, así que lo resumiremos en pocas palabras : Es una plataforma de desarrollo multi-lenguaje, que está pensada para correr sobre distintos entornos operativos, y que pretende unificar los distintos paradigmas de la programación (escritorio, cliente-servidor, WEB, etc.) en un mismo ambiente de trabajo..net está formado por cuatro componentes principales, a saber : 1. El CLR (Common Language Runtime). Es el entorno de ejecución para las aplicaciones que pueden haber sido escritas en alguno de los diferentes lenguajes que cumplen con los requisitos sintácticos y semánticos de.net.- 2. El MSIL (Microsoft Intermediate Language). Representa el código objeto al que es transformado el código fuente escrito en cualquiera de los lenguajes aceptados por.net. Estos, que luego va a ser compilado a nativo por el compilador JIT (Just In Time) que provee la CLR en tiempo de ejecución. 3. La biblioteca de clases.net Framework. Es una extensísima colección de clases base, para todos los propósitos imaginables, que es aceptada y usada por todos los lenguajes e IDEs que corren sobre.net 4. El entorno de programación (IDE). Es el ambiente de trabajo propiamente dicho que puede constar de herramientas de de diseño, editores, debugeadores y diversos asistentes, para que el programador pueda diseñar, escribir y probar sus aplicaciones. Existen varios (Sharp Develop, RAD Studio, etc.), pero nosotros en este curso y posteriores usaremos el propio de Microsoft : Visual Studio. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 5

1.3. Que es C# (Sharp) C# (se pronuncia se sharp ), es un lenguaje que pretende reunir lo mejor de los diversos lenguajes que compilan a nativo(c/c++, Object Pascal, ADA, etc.), y de aquellos interpretados (Java, Perl, etc.) en uno solo, y que además, pueda correr sobre diversos sistemas operativos. Al respecto, existe un proyecto paralelo al desarrollo de.net de Microsoft, que se denomina Mono que transportó el lenguaje C# y gran parte del framework.net a Unix/Linus/Solaris. C# toma gran parte de la sintaxis de C/C++, y muchas de las características de Eiffel (un lenguaje de laboratorio que ideó Bertrand Meyer), poniendo a disposición del desarrollador un potente lenguaje 100% orientado a objetos. Si bien el CLR, acepta muchos otros lenguajes, el framework.net está 100% escrito en C# ; por lo tanto ES EL LENGUAJE BASE PARA.NET. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 6

2. Entorno de Desarrollo 2.1. Objetivos 2.1.1. Mapa del Curso 1. Introducción a.net 2. Entorno de Desarrollo 3. Sintaxis y Semántica de C# 4. Arreglos 5. Introducción a la Programación Visual 6. Laboratorio 7. Introducción al Paradigma de Objetos www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 7

2.2. El compilador Cuando se instala en cada computadora el SDK de Microsoft.NET, se crea el directorio c:\windows\microsoft.net\framework\v2.0.50727\, dentro del cual se alojan los compiladores de línea. En nuestro caso el compilador para C# es csc.exe que puede ser invocado desde la línea de comandos (Inicio Ejecutar cmd). Cuando se invoca al compilador pasándole como parámetro un nombre de archivo cualquiera con la extensión.cs, convierte a este en un archivo *.exe (ejecutable), pero este NO es un ejecutable NATIVO (es decir autónomo), sino que necesita del framework.net con el CLR instalado en la misma maquina, para poder correr. 2.3. Los archivos fuentes ( *.cs ) Los archivos de código fuente no son mas que archivos de texto plano, que contienen las líneas del programa en C#, con las instrucciones que cada programador quiere que la aplicación lleve a cabo. Deben cumplir con las normas sintácticas del lenguaje, caso contrario, el compilador detecta los errores y no genera el ejecutable. Veamos un ejemplo : www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 8

/* * Nombre de archivo : saludo.cs * Autor : Claudio Zwitkovits * / // Clase de inicio del programa public class Hola { // Main indica la ejecucion del programa public static void Main() { // escribir en la consola System.Console.WriteLine( Hola a todos!!! ) ; } } Para compilar este programa, solo hay que ir a la línea de comandos y tipear : csc saludo.cs y esto generará el ejecutable saludo.exe que mostrará en la consola el mensaje Hola a todos!!! 2.4. Como está formado el framework.net La arquitectura del framework.net, es la implementación del CLI (Common Language Runtime) por parte de Microsoft para los lenguajes C#, Visual Basic, J#, ASP, y Jscript, mas varios paquetes que dan soporte a interfaces de usuario, acceso a datos, XML y WEB agrupadas en una Librería de Clase Base (BCL) que está formada por cientos de tipos de datos. Esta librería está escrita en MSIL, por lo que puede usarse desde cualquier lenguaje cuyo compilador genere MSIL. A través de las clases suministradas en ella es posible desarrollar cualquier tipo de aplicación, desde las tradicionales aplicaciones de ventanas, consola o servicio de Windows NT hasta los novedosos servicios Web y páginas ASP.NET.. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 9

Dada su amplitud ha sido necesario organizar las clases en ella incluida en espacios de nombres que agrupen clases con funcionalidades similares. Por ejemplo, los espacios de nombres más usados son: Espacio de nombres System System.Collections System.Data System.IO System.Net System.Reflection System.Runtime.Remoting System.Security System.Threading System.Web.UI.WebControls System.Windows.Forms System.XML Utilidad de los tipos de datos que contiene Tipos muy frecuentemente usados, como los los tipos básicos, tablas, excepciones, fechas, números aleatorios, recolector de basura, entrada/salida en consola, etc. Colecciones de datos de uso común como pilas, colas, listas, diccionarios, etc. Manipulación de bases de datos. Forman la denominada arquitectura ADO.NET. Manipulación de archivos y otros flujos de datos. Realización de comunicaciones en red. Acceso a los metadatos que acompañan a los módulos de código. Acceso a objetos remotos. Acceso a la política de seguridad en que se basa el CLR. Manipulación de hilos de ejecución. Creación de interfaces de usuario basadas en ventanas para aplicaciones Web. Creación de interfaces de usuario basadas en ventanas para aplicaciones estándar. Acceso a datos en formato XML. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 10

3. Sintaxis y Semántica de C# 3.1. Objetivos 3.1.1. Mapa del Curso 1. Introducción a.net 2. Entorno de Desarrollo 3. Sintaxis y Semántica de C# 4. Arreglos 5. Introducción a la Programación Visual 6. Laboratorio 7. Introducción al Paradigma de Objetos www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 11

3.2. Variables y constantes 3.2.1. Que es una variable Una variable reperesenta una posición en memoria en el que se puede almacenar un valor de un determinado tipo al que se le da un cierto nombre. Para poderla utilizar sólo hay que definirla indicando cual será su nombre y cual será el tipo de datos que podrá almacenar, lo que se hace siguiendo la siguiente sintaxis: <tipovariable> <nombrevariable>; Una variable puede ser definida dentro de una definición de clase, en cuyo caso se la denominaría campo. También puede definirse como un variable local a un método, que es una variable definida dentro del código del método a la que sólo puede accederse desde dentro de dicho código. Otra posibilidad es definirla como parámetro de un método, que son variables que almacenan los valores de llamada al método y que, al igual que las variables locales, sólo puede ser accedidas desde código ubicado dentro del método. El siguiente ejemplo muestra como definir variables de todos estos casos: Class GestorClientesApp{ public static void Main(){ string Nombre; // Declaración de la variable nombre, que es de tipo string Console.Write(" Cómo se llama el cliente? "); Nombre = Console.ReadLine(); Console.WriteLine("Mi cliente se llama {0}", Nombre); } } www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 12

En este sencillo programa, el compilador reservará memoria para la variable Nombre. En la ejecución del mismo primero preguntaría por el nombre del cliente y, después de haberlo escrito nosotros, nos diría cómo se llama. Algo así ( Mi cliente se llama Antonio es lo que hemos escrito nosotros durante la ejecución del programa): Cómo se llama el cliente? Antonio Mi cliente se llama Antonio También podemos inicializar el valor de una variable en el momento de declararla, sin que esto suponga un obstáculo para poder modificarlo después: int num=10; 3.2.2. Que es una constante De otro lado tenemos las constantes también hacen que el compilador reserve un espacio de memoria para almacenar un dato, pero en este caso ese dato es siempre el mismo y no se puede modificar durante la ejecución del programa.un ejemplo claro sería almacenar el valor de pi en una constante para no tener que poner el número en todas las partes donde lo podamos necesitar. Se declaran de un modo similar a las variables, basta con añadir la palabra const en la declaración. Ejemplo: www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 13

using System; namespace Circunferencia1{ class CircunferenciaApp{ public static void Main(){ const double PI=3.1415926; // Esto es una constante double Radio=4; // Esto es una variable Console.WriteLine("El perímetro de una circunferencia de radio {0} es {1}", Radio, 2*PI*Radio); Console.WriteLine("El área de un círculo de radio {0} es {1}", Radio, PI*Math.Pow(Radio,2)); } } } La salida en la consola de este programa sería la siguente: El perímetro de una circunferencia de radio 4 es 25,1327408 El área de un círculo de radio 4 es 50,2654816 www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 14

3.3. Tipos de dato 3.3.1. Introducción El sistema de tipos de datos suele ser la parte más importante de cualquier lenguaje de programación. El uso correcto de los distintos tipos de datos es algo fundamental para que una aplicación sea eficiente con el menor consumo posible de recursos. Actualmente, muchos de los lenguajes orientados a objetos proporcionan los tipos agrupándolos de dos formas: los tipos primitivos del lenguaje, como números o cadenas, y el resto de tipos creados a partir de clases. Esto genera muchas dificultades, ya que los tipos primitivos no son y no pueden tratarse como objetos, es decir, no se pueden derivar y no tienen nada que ver unos con otros. Sin embargo, en C# (más propiamente en.net Framework) contamos con un sistema de tipos unificado, el CTS (Common Type System), que proporciona todos los tipos de datos como clases derivadas de la clase de base System.Object (incluso los literales pueden tratarse como objetos). Sin embargo, el hacer que todos los datos que ha de manejar un programa sean objetos puede provocar que baje el rendimiento de la aplicación. Para solventar este problema,.net Framework divide los tipos en dos grandes grupos: los tipos valor y los tipos referencia. Cuando se declarara variable que es de un tipo valor se está reservando un espacio de memoria en la pila (stack) para que almacene los datos reales que contiene esta variable. Por ejemplo en la declaración: int num =10; Se está reservando un espacio de 32 bits en la pila (una variable de tipo int es un objeto de la clase System.Int32), en los que se almacena el 10, que es lo que vale la variable. Esto hace que la variable num se pueda tratar directamente como si fuera de un tipo primitivo en lugar de un objeto, mejorando notablemente el rendimento. Como consecuencia, una variable de tipo valor nunca puede contener null (referencia nula). Durante la ejecución de un programa, la memoria se distribuye en tres bloques: la pila, (stack), el montón (heap) y la memoria global. La pila es una estructura en la que los elementos se van apilando, de modo que el último elemento en entrar en la pila es el primero en salir (estructura LIFO, o sea, Last In First Out). El montón es un bloque de www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 15

memoria contiguo en el cual la memoria no se reserva en un orden determinado como en la pila, sino que se va reservando aleatoriamente según se va necesitando. Cuando el programa requiere un bloque del montón, este se sustrae y se retorna un puntero (varaible que contiene direcciones de memoria) al principio del mismo. La memoria global es el resto de memoria de la máquina que no está asignada ni a la pila ni al montón, y es donde se colocan el método main y las funciones que éste invocará. En el caso de una variable que sea de un tipo referencia, lo que se reserva es un espacio de memoria en el montón para almacenar el valor, pero lo que se devuelve internamente es una referencia al objeto, es decir, un puntero a la dirección de memoria que se ha reservado. En este caso, una variable de un tipo referencia sí puede contener una referncia nula (null). Porqué esta separación de tipos y posiciones de memoria?, porque una variable de un tipo valor funcionará como un tipo primitivo siempre que sea necesario, pero podrá funcionar también como un tipo referencia, es decir como un objeto, cuando se necesite que sea un objeto. Hacer esto en otros lenguajes, como Java, es imposible, dado que los tipos primitivos en Java no son objetos. Mas adelante ampliaremos estos conceptos. Los tipos de datos básicos son ciertos tipos de datos tan comúnmente utilizados en la escritura de aplicaciones que en C# se ha incluido una sintaxis especial para tratarlos. Por ejemplo, para representar números enteros de 32 bits con signo se utiliza el tipo de dato System.Int32 definido en la BCL, aunque a la hora de crear un objeto a de este tipo que represente el valor 2 se usa la siguiente sintaxis: System.Int32 a = 2; Dado lo frecuente que es el uso de este tipo también se ha predefinido en C# el alias int para el mismo, por lo que la definición de variable anterior queda así de compacta: int a = 2; System.Int32 no es el único tipo de dato básico incluido en C#. En el espacio de nombres System se han incluido todos estos: Tipo Descripción Bits Rango de valores Alias SByte Bytes con signo 8 [-128, 127] Sbyte Byte Bytes sin signo 8 [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] UInt32 Enteros normales sin signo 32 [0, 4.294.967.295] uint www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 16 Int

Int64 Enteros largos 64 [-9.223.372.036.854.775.808, 9.223.372.036.854.775.807] UInt64 [0- Enteros largos sin signo 64 18.446.744.073.709.551.615] Ulong Single Reales con 7 dígitos de precisión 32 [1,5 10-45 - 3,4 10 38 ] Float Double Reales de 15-16 dígitos de precisión 64 [5,0 10-324 - 1,7 10 308 ] double Decimal Reales de 28-29 dígitos de precisión 128 [1,0 10-28 - 7,9 10 28 ] decimal Boolean Valores lógicos 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 Long www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 17

3.3.2. Tipos de datos básicos Pese a su sintaxis especial, en C# los tipos básicos son tipos del mismo nivel que cualquier otro tipo del lenguaje. Es decir, heredan de System.Object y pueden ser tratados como objetos de dicha clase por cualquier método que espere un System.Object, lo que es muy útil para el diseño de rutinas genéricas que admitan parámetros de cualquier tipo y es una ventaja importante de C# frente a lenguajes similares como Java donde los tipos básicos no son considerados objetos. El valor que por defecto se le da a los campos de tipos básicos consiste en poner a cero todo el área de memoria que ocupen. Esto se traduce en que los campos de tipos básicos numéricos se inicializan por defecto con el valor 0, los de tipo bool lo hacen con false, los de tipo char con \u0000 (carácter nulo), y los de tipo string y object con null. Para los casos de los tipos de variables numéricas se puede especificar (durante la asignación de un valor), el tipo de dato numérico de ese valor mediante el uso de sufijos Los sufijos para los valores literales de los distintos tipos de datos numéricos son los siguientes: L (mayúscula o minúscula): long ó ulong, por este orden; U (mayúscula o minúscula): int ó uint, por este orden; UL ó LU (independientemente de que esté en mayúsuculas o minúsculas): ulong; F (mayúscula o minúscula): single; D (mayúscula o minúscula): double; M (mayúscula o minúscula): decimal; www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 18

3.4. Construcciones del lenguaje 3.4.1. Introduccion Cuando se desarrolla un programa, luego de declarar las variables, constantes, clases, etc., se debe especificar que hacer con/entre estos elementos, para ello iremos escribiendo : líneas (para C# cada línea de código termina con un ; punto y coma). 3.4.2. Sentencias Una sentencia es una orden que se le da al programa para realizar una tarea específica, esta puede ser: mostrar un mensaje en la pantalla, declarar una variable (para reservar espacio en memoria), inicializarla, llamar a un método, etc. Para C# cada sentencia termina con un ; (punto y coma). Normalmente, las sentencias se ponen unas debajo de otras, aunque sentencias cortas pueden colocarse en una misma línea. He aquí algunos ejemplos de sentencias : int x=10; usingsystem.io; Console.WriteLine("Hola Mundo"); En C#, los caracteres espacio en blanco se pueden emplear libremente.es muy importante para la legibilidad de un programa la colocación de unas líneas debajo de otras empleando tabuladores. El editor del IDE nos ayudará plenamente en esta tarea sin apenas percibirlo 3.4.3. Bloques de código Un bloque de código es un grupo de sentencias que se comportan como una unidad. Se los usa para indicar el comienzo y fin de un conjunto de líneas (sentancias) de código. Por lo general, se los usa para delimitar namespaces, clases, estructuras, enumerados y www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 19

métodos. Un bloque de código está limitado por las llaves de apertura { y cierre }. He aquí un ejemplo de uso : Static void main() { Linea1; Linea2; } Cada una de esas líneas, implica una expresión que el compilador de C# analizará, verificando que su sintaxis sea la correcta. Para ello disponemos de los operadores. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 20

3.5. Operadores 3.5.1. Que es un operador Un operador en C# es un símbolo formado por uno o más caracteres que permite realizar una determinada operación entre uno o más datos y produce un resultado. A continuación se describen cuáles son los operadores incluidos en el lenguaje clasificados según el tipo de operaciones que permiten realizar, aunque hay que tener en cuenta que C# permite la redefinición del significado de la mayoría de los operadores según el tipo de dato sobre el que se apliquen, por lo que lo que aquí se cuenta se corresponde con los usos más comunes de los mismos: Un operador es una expresión que produce otro valor (así como las funciones o construcciones que devuelven un valor). Existen operadores de comparación, de negación o de incremento y decremento. Las operaciones matemáticas se comportan de igual manera en PHP. Las operaciones * y / tienen precedencia sobre la suma y la resta y se pueden utilizar paréntesis para expresiones mas complejas. Un operador es un símbolo especial que indica al compilador que debe efectuar una operación matemática o lógica. En todo lenguaje de programación existen un conjunto de operadores que permiten realizar operaciones con los datos. Nos referimos a operaciones aritméticas, comparaciones, operaciones lógicas y otras operaciones (por ejemplo, concatenación de cadenas, operaciones algebraicas entre valores números, etc.). www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 21

3.5.2. Que es un Operador? Un operador es un símbolo especial que indica al compilador que debe efectuar una operación matemática o lógica. En todo lenguaje de programación existen un conjunto de operadores que permiten realizar operaciones con los datos. Nos referimos a operaciones aritméticas, comparaciones, operaciones lógicas y otras operaciones (por ejemplo, concatenación de cadenas, operaciones algebraicas entre valores números, etc.). 3.5.3. Operaciones aritméticas Los operadores aritméticos incluidos en C# son los típicos de suma (+), resta (- ), producto (*), división (/) y módulo (%) También se incluyen operadores de menos unario ( ) y más unario (+). 3.5.4. Operaciones lógicas Se incluyen operadores que permiten realizar las operaciones lógicas típicas: and (&& y &), or ( y ), not (!) y xor (^) Los operadores && y se diferencia de & y en que los primeros realizan evaluación perezosa y los segundos no. La evaluación perezosa consiste en que si el resultado de evaluar el primer operando permite deducir el resultado de la operación, entonces no se evalúa el segundo y se devuelve dicho resultado directamente, mientras que la evaluación no perezosa consiste en evaluar siempre ambos operandos. Es decir, si el primer operando de una operación && es falso se devuelve false directamente, sin evaluar el segundo; y si el primer operando de una es cierto se devuelve true directamente, sin evaluar el otro. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 22

3.5.5. Operaciones relacionales Se han incluido los tradicionales operadores de igualdad (==), desigualdad (!=), mayor que (>), menor que (<), mayor o igual que (>=) y menor o igual que (<=) 3.5.6. Operaciones de asignación Para realizar asignaciones se usa en C# el operador =, operador que además de realizar la asignación que se le solicita devuelve el valor asignado. Por ejemplo, la expresión a = b asigna a la variable a el valor de la variable b y devuelve dicho valor, mientras que la expresión c = a = b asigna a las variables c y a el valor de b (el operador = es asociativo por la derecha) También se han incluido operadores de asignación compuestos que permiten ahorrar tecleo a la hora de realizar asignaciones tan comunes como: temperatura = temperatura + 15; // Sin usar asignación compuesta temperatura += 15; // Usando asignación compuesta Las dos líneas anteriores son equivalentes, pues el operador compuesto += asigna a su primer operando el valor que tenía más el de su segundo operando (o sea, le suma el segundo operando) Como se ve, permite compactar bastante el código. Aparte del operador de asignación compuesto +=, también se ofrecen operadores de asignación compuestos para la mayoría de los operadores binarios ya vistos. Estos son: +=, -=, *=, /=, %=, &=, =, ^=, <<= y >>=. Nótese que no hay versiones compuestas para los operadores binarios && y. Otros dos operadores de asignación incluidos son los de incremento(++) y decremento (--) Estos operadores permiten, respectivamente, aumentar y disminuir en una unidad el valor de la variable sobre el que se aplican. Así, estas líneas de código son equivalentes: temperatura = temperatura + 1; //Sin asignación compuesta ni incremento temperatura += 1; //Usando asignación compuesta www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 23

temperatura++; //Usando incremento Si el operador ++ se coloca tras el nombre de la variable (como en el ejemplo) devuelve el valor de la variable antes de incrementarla, mientras que si se coloca antes, devuelve el valor de ésta tras incrementarla; y lo mismo ocurre con el operador --. Por ejemplo: c = b++; // Se asigna a c el valor de b y luego se incrementa b c = ++b; // Se incrementa el valor de b y luego se asigna a c La ventaja de usar los operadores ++ y -- es que en muchas máquinas son más eficientes que el resto de formas de realizar sumas o restas de una unidad, pues el compilador puede traducirlos en una única instrucción en código máquina 1. 3.5.7. Operaciones con cadenas Para realizar operaciones de concatenación de cadenas se puede usar el mismo operador que para realizar sumas, ya que en C# se ha redefinido su significado para que cuando se aplique entre operandos que sean cadenas o que sean una cadena y un carácter lo que haga sea concatenarlos. Por ejemplo, Hola + mundo devuelve Hola mundo, y Hola mund + o también. 3.5.8. Operador condicional Es el único operador incluido en C# que toma 3 operandos, y se usa así: <condición>? <expresión1> : <expresión2> El significado del operando es el siguiente: se evalúa <condición> Si es cierta se devuelve el resultado de evaluar <expresión1>, y si es falsa se devuelve el resultado de evaluar <condición2>. Un ejemplo de su uso es: b = (a>0)? a : 0; // Suponemos a y b de tipos enteros www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 24

En este ejemplo, si el valor de la variable a es superior a 0 se asignará a b el valor de a, mientras que en caso contrario el valor que se le asignará será 0. Hay que tener en cuenta que este operador es asociativo por la derecha, por lo que una expresión como a?b:c?d:e es equivalente a a?b:(c?d:e) No hay que confundir este operador con la instrucción condicional if que se tratará en el Tema 8:Instrucciones, pues aunque su utilidad es similar al de ésta,? devuelve un valor e if no. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 25

3.6. Instrucciones de control de flujo 3.6.1. Introduccion Hemos visto hasta ahora que los programas van ejecutando las líneas de código con orden. Sin embargo, hay muchas situaciones en las que es preciso alterar ese orden, o bien puede ocurrir que sea necesario que se efectúen una serie de operaciones que pueden ser distintas en otras circunstancias. Por ejemplo, si el programa pide una clave de acceso, deberá continuar con la ejecución normal en caso de que la clave introducida por el usuario sea correcta, y deberá salir del mismo en caso contrario. Pues bien: para todas estas cuestiones que, por otra parte, son muy frecuentes, tenemos las Instrucciones de control de flujo. En C# contamos con varios tipos de estas instrucciones : Las instrucciones condicionales (if else, switch) son instrucciones que permiten ejecutar bloques de instrucciones sólo si se da una determinada condición. Las instrucciones iterativas (while, do, for, foreach) son instrucciones que permiten ejecutar repetidas veces una instrucción o un bloque de instrucciones mientras se cumpla una condición. Es decir, permiten definir bucles donde ciertas instrucciones se ejecuten varias veces. Las instrucciones de salto (break, continue, return, goto) permiten variar el orden normal en que se ejecutan las instrucciones de un programa, que consiste en ejecutarlas una tras otra en el mismo orden en que se hubiesen escrito en el fuente. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 26

3.6.2. Instrucción if...else La instrucción if permite ejecutar ciertas instrucciones sólo si de da una determinada condición. Su sintaxis de uso es la sintaxis: if (<condición>) { <instruccionesif> } Else { <instruccioneselse> } El significado de esta instrucción es el siguiente: se evalúa la expresión <condición>, que ha de devolver un valor lógico. Si es cierta (devuelve true) se ejecutan las <instruccionesif>, y si es falsa (false) se ejecutan las <instruccioneselse> La rama else es opcional, y si se omite y la condición es falsa se seguiría ejecutando a partir de la instrucción siguiente al if. En realidad, tanto <instruccionesif> como <instruccioneselse> pueden ser una única instrucción o un bloque de instrucciones. Un ejemplo de aplicación de esta instrucción es esta variante del HolaMundo: www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 27

using System; class HolaMundoIf { public static void Main(String[] args) { if (args.length > 0) { Console.WriteLine( Hola {0}!, args[0]) ; } Else { Console.WriteLine( Hola mundo! ); } } } Si ejecutamos este programa sin ningún argumento veremos que el mensaje que se muestra es Hola Mundo!, mientras que si lo ejecutamos con algún argumento se mostrará un mensaje de bienvenida personalizado con el primer argumento indicado. 3.6.3. Instrucción switch La instrucción switch permite ejecutar unos u otros bloques de instrucciones según el valor de una cierta expresión. Su estructura es: switch (<expresión>) { case valor1: Sentencias1; <siguiente accion>; case valor2: Sentencias2; <siguiente accion>; case valor3: Sentencias3; <siguiente accion>; default: Sentencias4; } www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 28

El significado de esta instrucción es el siguiente: se evalúa <expresión>. Si su valor es <valor1> se ejecuta el <bloque1>, si es <valor2> se ejecuta <bloque2>, y así para el resto de valores especificados. Si no es igual a ninguno de esos valores y se incluye la rama default, se ejecuta el <bloquedefault>; pero si no se incluye se pasa directamente a ejecutar la instrucción siguiente al switch. Los valores indicados en cada rama del switch han de ser expresiones constantes que produzcan valores de algún tipo básico entero, de una enumeración, de tipo char o de tipo string. Además, no puede haber más de una rama con el mismo valor. En realidad, aunque todas las ramas de un switch son opcionales siempre se ha de incluir al menos una. Además, la rama default no tiene porqué aparecer la última si se usa, aunque es recomendable que lo haga para facilitar la legibilidad del código. El elemento marcado como <siguienteacción> colocado tras cada bloque de instrucciones indica qué es lo que ha de hacerse tras ejecutar las instrucciones del bloque que lo preceden. Puede ser uno de estos tres tipos de instrucciones: goto case <valori>; goto default; break; Si es un goto case indica que se ha de seguir ejecutando el bloque de instrucciones asociado en el switch a la rama del <valori> indicado, si es un goto default indica que se ha de seguir ejecutando el bloque de instrucciones de la rama default, y si es un break indica que se ha de seguir ejecutando la instrucción siguiente al switch. El siguiente ejemplo muestra cómo se utiliza switch: using System; class HolaMundoSwitch www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 29

{ public static void Main(String[] args) { if (args.length > 0) switch(args[0]) { case José : Console.WriteLine( Hola José. Buenos días ); break; case Paco : Console.WriteLine( Hola Paco. Me alegro de verte ); break; default: Console.WriteLine( Hola {0}, args[0]); break; } else Console.WriteLine( Hola Mundo ); } } Este programa reconoce ciertos nombres de personas que se le pueden pasar como argumentos al lanzarlo y les saluda de forma especial. La rama default se incluye para dar un saludo por defecto a las personas no reconocidas. 3.6.4. Instrucción while La instrucción while permite ejecutar un bloque de instrucciones mientras se de una cierta instrucción. Su sintaxis de uso es: while (<condición>) { <instrucciones> } www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 30

Su significado es el siguiente: Se evalúa la <condición> indicada, que ha de producir un valor lógico. Si es cierta (valor lógico true) se ejecutan las <instrucciones> (sentencia) y se repite el proceso de evaluación de <condición> y ejecución de <instrucciones> hasta que deje de serlo. Cuando sea falsa (false) se pasará a ejecutar la instrucción siguiente al while. En realidad <instrucciones> puede ser una única sentencia o un bloque de sentencias. Un ejemplo cómo utilizar esta instrucción es el siguiente: using System; class HolaMundoWhile { public static void Main(String[] args) { int actual = 0; if (args.length > 0) while (actual < args.length) { Console.WriteLine( Hola {0}!, args[actual]); actual = actual + 1; } else Console.WriteLine( Hola mundo! ); } } En este caso, si se indica más de un argumento al llamar al programa se mostrará por pantalla un mensaje de saludo para cada uno de ellos. Para ello se usa una variable actual que almacena cuál es el número de argumento a mostrar en cada ejecución del www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 31

while. Para mantenerla siempre actualizada lo que se hace es aumentar en una unidad su valor tras cada ejecución de las <instrucciones> del bucle. Por otro lado, dentro de las <instrucciones> de un while pueden utilizarse las siguientes dos instrucciones especiales: break;: Indica que se ha de abortar la ejecución del bucle y continuarse ejecutando por la instrucción siguiente al while. continue;: Indica que se ha de abortar la ejecución de las <instrucciones> y reevaluarse la <condición> del bucle, volviéndose a ejecutar las <instrucciones> si es cierta o pasándose a ejecutar la instrucción siguiente al while si es falsa. 3.6.5. Instrucción do...while La instrucción do...while es una variante del while que se usa así: Do { <instrucciones> } while(<condición>); La única diferencia del significado de do...while respecto al de while es que en vez de evaluar primero la condición y ejecutar <instrucciones> (sentencia) sólo si es cierta, do...while primero ejecuta las <instrucciones> y luego mira la <condición> para ver si se ha de repetir la ejecución de las mismas. Por lo demás ambas instrucciones son iguales, e incluso también puede incluirse break; y continue; entre las <instrucciones> del do...while. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 32

do... while está especialmente destinado para los casos en los que haya que ejecutar las <instrucciones> al menos una vez aún cuando la condición sea falsa desde el principio, como ocurre en el siguiente ejemplo: using System; class HolaMundoDoWhile { public static void Main() { String leído; Do { Console.WriteLine( Clave: ); leído = Console.ReadLine(); } while (leído!= José ); Console.WriteLine( Hola José ); } } Este programa pregunta al usuario una clave y mientras no introduzca la correcta (José) no continuará ejecutándose. Una vez que introducida correctamente dará un mensaje de bienvenida al usuario. 3.6.6. Instrucción for La instrucción for realiza un bucle determinado número de veces. Consta de tres partes La sentencia inicialización se ejecuta al comienzo del ciclo La condición que se evalúa al entrar al buclé y luego al comienzo de cada iteración. La modificación se ejecuta al final de cada iteración, y previene que no se entre bucle infinito (se ejecuta al final de cada iteración). un escribir los tipos de bucles más comúnmente usados en programación. Su sintaxis es: for (<inicialización>; <condición>; <modificación>) { <instrucciones> } www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 33

El significado de esta instrucción es el siguiente: se ejecutan las instrucciones de <inicialización>, que suelen usarse para definir e inicializar variables que luego se usarán en <instrucciones> (sentencias). Luego se evalúa <condición>, y si es falsa se continúa ejecutando por la instrucción siguiente al for; mientras que si es cierta se ejecutan las <instrucciones> indicadas, luego se ejecutan las instrucciones de <modificación> -que como su nombre indica suelen usarse para modificar los valores de variables que se usen en <instrucciones>- y luego se reevalúa <condición> repitiéndose el proceso hasta que ésta última deje de ser cierta. En <inicialización> puede en realidad incluirse cualquier número de instrucciones que no tienen porqué ser relativas a inicializar variables o modificarlas, aunque lo anterior sea su uso más habitual. En caso de ser varias se han de separar mediante comas (,), ya que el carácter de punto y coma (;) habitualmente usado para estos menesteres se usa en el for para separar los bloques de <inicialización>, <condición> y <modificación> Además, la instrucción nula no se puede usar en este caso y tampoco pueden combinarse definiciones de variables con instrucciones de otros tipos. Con <modificación> pasa algo similar, ya que puede incluirse código que nada tenga que ver con modificaciones pero en este caso no se pueden incluir definiciones de variables. Como en el resto de instrucciones hasta ahora vistas, en <instrucciones> puede ser tanto una única instrucción como un bloque de instrucciones. Además, las variables que se definan en <inicialización> serán visibles sólo dentro de esas <instrucciones>. La siguiente clase es equivalente a la clase HolaMundoWhile ya vista solo que hace uso del for para compactar más su código: www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 34

using System; class HolaMundoFor { public static void Main(String[] args) { if (args.length > 0) for (int actual = 0; actual < args.length; actual++) Console.WriteLine( Hola {0}!, args[actual]); else Console.WriteLine( Hola mundo! ); } } Al igual que con while, dentro de las <instrucciones> del for también pueden incluirse instrucciones continue; y break; que puedan alterar el funcionamiento normal del bucle. 3.6.7. Instrucción break Ya se ha visto que la instrucción break sólo puede incluirse dentro de bloques de instrucciones asociados a instrucciones iterativas o instrucciones switch e indica que se desea abortar la ejecución de las mismas y seguir ejecutando a partir de la instrucción siguiente a ellas. Se usa así: break; Cuando esta sentencia se usa dentro de un try con cláusula finally, antes de abortarse la ejecución de la instrucción iterativa o del switch que la contiene y seguirse ejecutando por la instrucción que le siga, se ejecutarán las instrucciones de la cláusula finally del try. Esto se hace para asegurar que el bloque finally se ejecute aún en caso de salto. Además, si dentro una cláusula finally incluida en de un switch o de una instrucción iterativa se usa break, no se permite que como resultado del break se salga del finally. 3.6.8. Instrucción continue Ya se ha visto que la instrucción continue sólo puede usarse dentro del bloque de instrucciones de una instrucción iterativa e indica que se desea pasar a reevaluar www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 35

directamente la condición de la misma sin ejecutar el resto de instrucciones que contuviese. La evaluación de la condición se haría de la forma habitual: si es cierta se repite el bucle y si es falsa se continúa ejecutando por la instrucción que le sigue. Su sintaxis de uso es así de sencilla: continue; En cuanto a sus usos dentro de sentencias try, tiene las mismas restricciones que break: antes de salir de un try se ejecutará siempre su bloque finally y no es posible salir de un finally incluido dentro de una instrucción iterativa como consecuencia de un continue. 3.6.9. Instrucción return Esta instrucción se usa para indicar cuál es el objeto que ha de devolver un método. Su sintaxis es la siguiente: return <objetoretorno>; La ejecución de esta instrucción provoca que se aborte la ejecución del método dentro del que aparece y que se devuelva el <objetoretorno> al método que lo llamó. Como es lógico, este objeto ha de ser del tipo de retorno del método en que aparece el return o de alguno compatible con él, por lo que esta instrucción sólo podrá incluirse en métodos cuyo tipo de retorno no sea void, o en los bloques get de las propiedades o indizadores. De hecho, es obligatorio que todo método con tipo de retorno termine por un return. Los métodos que devuelvan void pueden tener un return con una sintaxis espacial en la que no se indica ningún valor a devolver sino que simplemente se usa return para indicar que se desea terminar la ejecución del método: return; Nuevamente, como con el resto de instrucciones de salto hasta ahora vistas, si se incluyese un return dentro de un bloque try con cláusula finally, antes de devolverse el objeto especificado se ejecutarían las instrucciones de la cláusula finally. Si hubiesen varios bloques finally anidados, las instrucciones de cada uno es ejecutarían de manera ordenada (o sea, del más interno al más externo) Ahora bien, lo que no es posible es incluir un return dentro de una cláusula finally. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 36

3.6.10. Instrucción goto La instrucción goto permite pasar a ejecutar el código a partir de una instrucción cuya etiqueta se indica en el goto. La sintaxis de uso de esta instrucción es: goto <etiqueta>; Como en la mayoría de los lenguajes, goto es una instrucción maldita cuyo uso no se recomienda porque dificulta innecesariamente la legibilidad del código y suele ser fácil simularla usando instrucciones iterativas y selectivas con las condiciones apropiadas. Sin embargo, en C# se incluye porque puede ser eficiente usarla si se anidan muchas instrucciones y para reducir sus efectos negativos se le han impuesto unas restricciones: Sólo se pueden etiquetar instrucciones, y no directivas preprocesado, directivas using o definiciones de miembros, tipos o espacios de nombres. La etiqueta indicada no pueda pertenecer a un bloque de instrucciones anidado dentro del bloque desde el que se usa el goto ni que etiquete a instrucciones de otro método diferente a aquél en el cual se encuentra el goto que la referencia. Para etiquetar una instrucción de modo que pueda ser destino de un salto con goto basta precederla del nombre con el que se la quiera etiquetar seguido de dos puntos (:) Por ejemplo, el siguiente código demuestra cómo usar goto y definir una etiqueta: using System; class HolaMundoGoto { public static void Main(string[] args) { for (int i=0; i<args.length; i++) { if (args[i]!= salir ) Console.WriteLine(args[i]); else goto fin: } fin: ; www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 37

} } Este programa de ejemplo lo que hace es mostrar por pantalla todos los argumentos que se le pasen como parámetros, aunque si alguno de fuese salir entonces se dejaría de mostrar argumentos y se aborta la ejecución de la aplicación. Véase además que este ejemplo pone de manifiesto una de las utilidades de la instrucción nula, ya que si no se hubiese escrito tras la etiqueta fin el programa no compilaría en tanto que toda etiqueta ha de preceder a alguna instrucción (aunque sea la instrucción nula) Nótese que al fin y al cabo los usos de goto dentro de instrucciones switch que se vieron al estudiar dicha instrucción no son más que variantes del uso general de goto, ya que default: no es más que una etiqueta y case <valor>: puede verse como una etiqueta un tanto especial cuyo nombre es case seguido de espacios en blanco y un valor. En ambos casos, la etiqueta indicada ha de pertenecer al mismo switch que el goto usado y no vale que éste no la contenga pero la contenga algún switch que contenga al switch del goto. www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 38

3.7. Comentarios 3.7.1. Que es un comentario Un comentario es texto que se incluye en el código fuente para facilitar su lectura a los programadores y cuyo contenido es, por defecto, completamente ignorado por el compilador. En C# hay dos formas de escribir comentarios. La primera consiste en encerrar todo el texto que se desee comentar entre caracteres /* y */ siguiendo la siguiente sintaxis: /*<texto>*/ 3.7.2. Utilización de comentarios Estos comentarios pueden abarcar tantas líneas como sea necesario. Por ejemplo: /* Esto es un comentario que ejemplifica cómo se escribe comentarios de varias líneas */ No es posible anidar comentarios de este tipo. Es decir, no vale escribir comentarios como el siguiente: /* Comentario contenedor /* Comentario contenido */ */ Dado que muchas veces los comentarios que se escriben son muy cortos y no suelen ocupar más de una línea, C# ofrece una sintaxis alternativa más compacta para la escritura este tipo de comentarios en las que se considera como indicador del comienzo del comentario la pareja de caracteres // y como indicador de su final el fin de línea. Por tanto, la sintaxis que siguen estos comentarios es: // <texto> www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 39

Y un ejemplo de su uso es: // Este es un comentario de una sola línea Estos comentarios de una sola línea sí que pueden anidarse sin ningún problema. Por ejemplo, el siguiente comentario es perfectamente válido: // Comentario contenedor // Comentario contenido www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 40

4. Arreglos 4.1. Objetivos 4.1.1. Mapa del Curso 1. Introducción a.net 2. Entorno de Desarrollo 3. Sintaxis y Semántica de C# 4. Arreglos 5. Introducción a la Programación Visual 6. Laboratorio 7. Introducción al Paradigma de Objetos www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 41

4.1.2. Descripción En este capitulo usted verá: Una introducción a los vectores Creación de los vectores Usos de los vectores 4.1.3. Metas Al final de este capitulo usted será capaz de: Dominar los conceptos de vectores Conocer la utilización de los vectores www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 42

4.2. Introduccion Hasta ahora hemos aprendido un montón de cosas con respecto a las variables, pero siempre teníamos que saber con antelación el número de variables que el programa iba a necesitar. Sin embargo, habrá situaciones en las que no sea posible determinar este número hasta que el programa no se esté ejecutando. Pues bien, para solucionar estas dificultades contamos con los arrays. 4.3. Arreglos de una dimension Un array es una variable que puede almacenar varios valores simultáneamente. Cada uno de estos valores se identifica mediante un número al cual se llama índice. Así, para acceder al primer elemento del array habría que usar el índice cero, para el segundo el índice uno, para el tercero el índice dos, y así sucesivamente. Se lo decalra de la siguiente forma : tipo[] variable; Es muy parecido a como se declara una variable normal, sólo que hay que poner corchetes detrás del tipo. En C# los arrays son objetos derivados de la clase System.Array. Por lo tanto, y esto es muy importante, cuando declaramos un array en C# este aún no se habrá creado, en consecuencia, antes de poder usarlos habrá que instanciarlos, como si fuera cualquier otro objeto. Veamos un breve ejemplo : string[] nombres; // Declaración del array nombres = new string[3]; // Instanciación del array En efecto, el array nombres será utilizable únicamente a partir de su instanciación, y podrá tener un maximo de tres elementos (0, 1 y 2). Notesé que indice del array comienza de CERO (0) y NO de uno (1), por lo cual el índice del último elemento es siempre el TotalElementos menos uno (3-1=2) www.educacionit.com.ar Tel. (54) (011) 5032-2650 Página 43