0% encontró este documento útil (0 votos)
138 vistas28 páginas

Introducción a C# y Estructuras de Control

1. La unidad introduce C# y .NET, explicando que C# es un lenguaje orientado a objetos diseñado por Microsoft para la plataforma .NET. 2. Cubre la estructura básica de un programa en C#, incluyendo directivas, espacios de nombres, clases, métodos y variables. 3. Explica los diferentes tipos de instrucciones y la depuración.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
138 vistas28 páginas

Introducción a C# y Estructuras de Control

1. La unidad introduce C# y .NET, explicando que C# es un lenguaje orientado a objetos diseñado por Microsoft para la plataforma .NET. 2. Cubre la estructura básica de un programa en C#, incluyendo directivas, espacios de nombres, clases, métodos y variables. 3. Explica los diferentes tipos de instrucciones y la depuración.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERIA Y ARQUITECTURA


ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS
INTRODUCCION A LA INFORMATICA - CICLO I 2016
Unidad II. Estructuras Control

Objetivo de la Unidad II
- Conocer la estructura del programa, haciendo uso de sentencias de control secuenciales.
- Conocer las características y forma de trabajo de C# y .NET
- Explorar la forma de Programar en C# a través de Consola.
Estrcutu

Contenido de la Unidad: 1. Introducción al lenguaje C# y .NET


1.1 La evolución de los C hasta C#
1.2 Como programar en C#
2. Estructura Básica de un Programa
2.1 Directivas using y espacios con nombres
2.2 Librería de clase base (BCL)
2.3 Comentarios
2.4 Palabras reservadas
2.5 Namespace
2.6 Console
2.7 Class
2.8 Main()
2.9 Método
2.10 Variables y constantes en C#
3. Instrucciones
3.1 Tipos de instrucciones
3.2 Depuración y Tratamiento de Errores

1. Introducción al lenguaje C# y .NET


C# (leído en inglés “C Sharp” y en español “C Almohadilla”) es un lenguaje de propósito general
diseñado por Microsoft para la plataforma NET. Es el lenguaje utilizado por Microsoft para desarrollar
la mayoría del código de NET. Aunque es posible escribir código para la plataforma .NET en muchos
otros lenguajes, C# es el único que ha sido diseñado específicamente para ser utilizado en dicha
plataforma, se suele decir que C# es el lenguaje nativo de .NET

C# es un lenguaje orientado a objetos, por lo que en lenguaje todo es trabajado como un objeto.
Actualmente, C# es un estándar ECMA (European Computer Association Manufacturing) e ISO.

1
La sintaxis y estructuración de C# es muy parecida a la de C++ o Java, puesto que la intención de
Microsoft es facilitar la migración de códigos escritos en estos lenguajes a C# y facilitar su aprendizaje
a los desarrolladores habituados a ellos. Sin embargo, su sencillez y el alto nivel de productividad son
comparables con los de Visual Basic.

Características de C#:

Con la idea de obtener una visión general del lenguaje, a continuación se presenta de manera
resumida las principales características de C# Alguna de las características aquí señaladas no son
exactamente propias del lenguaje sino de la plataforma .NET en general, y si aquí se comentan es
porque tienen una repercusión directa en el lenguaje:

 Sencillez: C# elimina muchos elementos que otros lenguajes incluyen y que son innecesarios
en .NET. Por ejemplo:

 El código escrito en C# es autocontenido, lo que significa que no necesita de archivos


adicionales al propio fuente tales como archivos de cabecera o archivos IDL .

 El tamaño de los tipos de datos básicos es fijo e independiente del compilador, sistema
operativo o máquina para que se compile (no como en C++), lo que facilita la
portabilidad del código.

 No se incluyen elementos poco útiles de lenguajes como C++ tales como macros,
herencia múltiple o la necesidad de un operador diferente del punto (.) acceder a
miembros de espacios de nombres (::)

 Modernidad: C# incorpora en el propio lenguaje elementos que a lo largo de los años ha ido
demostrándose son muy útiles para el desarrollo de aplicaciones y que en otros lenguajes
como Java o C++ se encuentran presentes, como el tipo básico decimal que permita realizar
operaciones de alta precisión con reales de 128 bits (muy útil en el mundo financiero), la
inclusión de una instrucción foreach que permita recorrer colecciones con facilidad y es
ampliable a tipos definidos por el usuario, la inclusión de un tipo básico string para
representar cadenas o la distinción de un tipo bool específico para representar valores lógicos.

 Orientación a objetos: Como todo lenguaje de programación de propósito general actual, C#


es un lenguaje orientado a objetos, aunque eso es más bien una característica del CTS que de
C#. Una diferencia de este enfoque orientado a objetos respecto al de otros lenguajes como
C++ es que el de C# es más puro en tanto que no admiten ni funciones ni variables globales
sino que todo el código y datos han de definirse dentro de definiciones de tipos de datos, lo
que reduce problemas por conflictos de nombres y facilita la legibilidad del código.

C# soporta todas las características propias del paradigma de programación orientada a


objetos: encapsulación, herencia y polimorfismo.

2
En lo referente a la encapsulación es importante señalar que aparte de los típicos
modificadores public, private y protected, C# añade un cuarto modificador llamado internal,
que puede combinarse con protected e indica que al elemento a cuya definición precede sólo
puede accederse desde su mismo ensamblado.

Respecto a la herencia -a diferencia de C++ y al igual que Java- C# sólo admite herencia simple
de clases ya que la múltiple provoca más problemas que beneficios y en la mayoría de los
casos su utilidad puede ser simulada con facilidad mediante herencia múltiple de interfaces.
De todos modos, esto vuelve a ser más bien una característica propia del CTS que de C#.

Por otro lado y a diferencia de Java, en C# se ha optado por hacer que todos los métodos sean
por defecto sellados y que los redefinibles hayan de marcarse con el modificador virtual (como
en C++), lo que permite evitar errores derivados de redefiniciones accidentales. Además, un
efecto secundario de esto es que las llamadas a los métodos serán más eficientes por defecto
al no tenerse que buscar en la tabla de funciones virtuales la implementación de los mismos a
la que se ha de llamar. Otro efecto secundario es que permite que las llamadas a los métodos
virtuales se puedan hacer más eficientemente al contribuir a que el tamaño de dicha tabla se
reduzca.
 Seguridad de tipos: C# incluye mecanismos que permite asegurar que los accesos a tipos de
datos siempre se realicen correctamente, lo que evita que se produzcan errores difíciles de
detectar por acceso a memoria no perteneciente a ningún objeto, es especialmente necesario
en un entorno gestionado por un recolector de basura. Para ello se toman medidas del tipo:

 Sólo se admiten conversiones entre tipos compatibles. Esto es, entre un tipo y
antecesores suyos, entre tipos para los que explícitamente se haya definido un
operador de conversión, y entre un tipo y un tipo hijo suyo del que un objeto del
primero almacenase una referencia del segundo (downcasting) Obviamente, lo último
sólo puede comprobarlo en tiempo de ejecución el CLR y no el compilador, por lo que
en realidad el CLR y el compilador colaboran para asegurar la corrección de las
conversiones.

 No se pueden usar variables no inicializadas. El compilador da a los campos un valor


por defecto consistente en ponerlos a cero y controla mediante análisis del flujo de
control de la fuente que no se lea ninguna variable local sin que se le haya asignado
previamente algún valor.

 Se comprueba que todo acceso a los elementos de una tabla se realice con índices que
se encuentren dentro del rango de la misma.

 Se puede controlar la producción de desbordamientos en operaciones aritméticas,


informándose de ello con una excepción cuando ocurra. Sin embargo, para conseguirse
un mayor rendimiento en la aritmética estas comprobaciones no se hacen por defecto
al operar con variables sino sólo con constantes (se pueden detectar en tiempo de
compilación)

3
 A diferencia de Java, C# incluye delegados, que son similares a los punteros a funciones
de C++ pero siguen un enfoque orientado a objetos, pueden almacenar referencias a
varios métodos simultáneamente, y se comprueba que los métodos a los que apunten
tengan parámetros y valor de retorno del tipo indicado al definirlos.

 Pueden definirse métodos que admitan un número indefinido de parámetros de un


cierto tipo, y a diferencia lenguajes como C/C++, en C# siempre se comprueba que los
valores que se les pasen en cada llamada sean de los tipos apropiados.

Mejoras sobre C++ en las áreas de seguridad de datos, versionamiento, eventos y recolección de
basura.
 Acceso al Sistema Operativo, COM y APIs
 Soporta el modo unsafe que permite el uso de punteros como en C.
 Generación de documentación XML automática.
 Creación de páginas ASP.NET y servicios Web.
El programa tiene un punto de entrada que es el método Main, perteneciente a una clase. Más
adelante se desarrollarán ejercicios que necesiten de la definición e implementación de clases. Por
ahora es suficiente con que en el método Main se invoque la ejecución del ejercicio que se desea
probar; de este modo, se pueden escribir en un mismo archivo de código, todos los ejercicios; el uso
de otras clases favorece a la idea de que cada porción de código este documentada y realice una sola
tarea (luego se verá en más detalle).
C# es un lenguaje orientado a objetos elegante y con seguridad de tipos que permite a los
desarrolladores compilar diversas aplicaciones sólidas y seguras que se ejecutan en .NET Framework.
Puede utilizar C# para crear aplicaciones cliente de Windows, servicios Web XML, componentes
distribuidos, aplicaciones cliente-servidor, aplicaciones de base de datos, y más. Visual C# proporciona
un editor de código avanzado, cómodos diseñadores de interfaz de usuario, depurador integrado y
numerosas herramientas más para facilitar el desarrollo de aplicaciones basadas el lenguaje C# y .NET
Framework.
La sintaxis de C# es muy expresiva, pero también es sencilla y fácil de aprender; la sintaxis de C#
basada en signos de llave podrá ser reconocida inmediatamente por cualquier persona familiarizada
con C, C++ o Java.
C# admite métodos y tipos genéricos, que proporcionan mayor rendimiento y seguridad de tipos, e
iteradores, que permiten a los implementadores de clases de colección definir comportamientos de
Todas las variables y métodos, incluido el método Main que es el punto de entrada de la aplicación, se
encapsulan dentro de definiciones de clase.
Una clase puede heredar directamente de una clase primaria, pero puede implementar cualquier
número de interfaces. Los métodos que reemplazan a los métodos virtuales en una clase primaria
requieren la palabra clave override como medio para evitar redefiniciones accidentales. En C#, una
struct es como una clase sencilla; es un tipo asignado en la pila que puede implementar interfaces
pero que no admite la herencia.

4
Además de estos principios básicos orientados a objetos, C# facilita el desarrollo de componentes de
software a través de varias construcciones de lenguaje innovadoras, entre las que se incluyen las
siguientes:
 Firmas de métodos encapsulados denominadas delegados, que habilitan notificaciones de
eventos con seguridad de tipos.
 Propiedades, que actúan como descriptores de acceso para variables miembro privadas.
 Atributos, que proporcionan metadatos declarativos sobre tipos en tiempo de ejecución.
 Comentarios en línea de documentación XML.
 Language-Integrated Query (LINQ) que proporciona funciones de consulta integradas en una
gran variedad de orígenes de datos.

El proceso de compilación de C# es simple en comparación con el de C y C++, y es más flexible que en


Java.
No hay archivos de encabezado independientes, ni se requiere que los métodos y los tipos se declaren
en un orden determinado.
Un archivo de código fuente de C# puede definir cualquier número de clases, structs, interfaces y
eventos.

5
1.1 La evolución de los C hasta C#

C# es un lenguaje diseñado por Microsoft para generar programas


sobre la plataforma .NET. Es fruto de una evolución que partió con el
nacimiento de C, que era un lenguaje en el que se trabajaba con
programación estructurada, luego apareció C++ que ya permitía la
programación orientada a objetos, y por último la evolución dio lugar
a C#. Este último coge lo mejor de diferentes lenguajes de
programación como C++, Visual Basic, Java o Delphi, dando como
resultado un lenguaje que combina a partes iguales potencia y
sencillez. De este modo además facilita la migración de los
programadores de estos otros lenguajes a C#. En definitiva se trata de
un lenguaje moderno, intuitivo y muy eficiente, que mejora la
productividad en el desarrollo de software. Además es el lenguaje de la plataforma .NET con más y
mejores ejemplos; es más, la propia plataforma fue desarrollada con este lenguaje (López, 2016).

1.2 Como programar en C#

Para poder programar en C#, se hará a través de Visual Estudio, la cual nos muestra la siguiente
pantalla

Para compilar desde el IDE de Visual Studio, se deberán realizar los siguientes pasos:

a) Crear un proyecto nuevo.


Esto se debe hacer directamente al iniciar Visual Studio, pulsando con el ratón (Muose) en la
pestaña: ARCHIVO, seguidamente en Nuevo Proyecto, como se muestra en la siguiente figura

6
b) Elegir como tipo de proyecto: Proyectos de Visual C#, y como plantilla “Aplicación de consola”

Este es un buen momento para dar nombre al proyecto (caja de textos Nombre) y decidir el
lugar en el que será almacenado (caja de texto Ubicación). En este ejemplo se dejarán los
valores que el programa propone por defecto. El resultado será el de la figura siguiente:

Se crea una clase Class1, que es la que debe implementar la funcionalidad y que posee un
método Main() y un constructor (como se visualiza en la figura anterior). Como se ve, la
estructura mínima que se ofrece es una clase, ya que la filosofía C# para .NET es trabajar
únicamente con clases, no con funciones ni variables globales.

7
c) El siguiente paso es añadir el código necesario apoyándose en las facilidades de desarrollo que
ofrece el IDE del Visual Studio

Se puede observar que, directamente, se importa el namespace System y otros que son de
común uso. Cuando se esté escribiendo el código, después de escribir la clase Console y el
punto para invocar al método WriteLine, automáticamente se presenta una ventana donde se
puede elegir el nombre del método, bien con el cursor o bien escribiendo las primeras letras
del método. Cuando el foco esté en el método, basta con pulsar RETURN y se escribe el
método WriteLine(). Al abrir el paréntesis, aparece la ayuda sobre el tipo de argumentos que
puede recibir el método.

d) Una vez escrito el código, se ha de construir el proyecto: Se procede a compilarlo.

e) Depurar de un programa

Si dentro de la carpeta DEPURAR, se selecciona la opción Iniciar depuración (F5), se visualiza


solamente los resultados de la depuración, como se muestra en la siguiente figura

8
En cambio, si selecciona la opción Iniciar sin depurar, muestra la pantalla con el resultado de
ejecución, como se observa a continuación en la siguiente figura.

9
2. Estructura Básica de un Programa
Los programas en C# pueden constar de uno o varios archivos. Cada archivo puede contener
cero o varios espacios de nombres. Un espacio de nombres puede contener tipos como son
clases, estructuras, interfaces, enumeraciones y delegados, además de otros espacios de
nombres. A continuación, se muestra el esqueleto de un programa en C# que contiene todos
estos elementos.

Una solución debe de contener los siguientes elementos, que se muestran en la siguiente
figura:

Se visualiza los siguientes elementos:

2.1 Directivas using y espacios con nombres

Cuando se crea una aplicación de consola con Visual Studio, las primeras líneas en el editor de
código contienen directivas using que muestran varios espacios de nombres de .NET
Framework.

Un espacio de nombres es una manera de agrupar clases y estructuras de una manera que
limita su ámbito y evita conflictos de nombres con otras clases y estructuras.

Cuando crea un programa en Visual Studio, se crea automáticamente un espacio de nombres,


para utilizar las clases de otros espacios de nombres en su programa, debe especificarlos con
una directiva using.

Los espacios de nombres más comúnmente utilizados en .NET Framework se muestran de


forma predeterminada cuando crea una nueva aplicación.

Si utilizan clases de otros espacios de nombres en la biblioteca de clases, se debe agregar una
directiva using para ese espacio de nombres al archivo de código fuente. El permitir el uso de
tipos en un espacio de nombres, hace que no sea necesario calificar el uso de un tipo en dicho
espacio de nombres

10
2.2 Librería de clase base (BCL)

La Librería de Clase Base (BCL) es una librería incluida en el .NET Framework formada por
cientos de tipos de datos que permiten acceder a los servicios ofrecidos por el CLR y a las
funcionalidades más frecuentemente usadas a la hora de escribir programas. Además, a partir
de estas clases prefabricadas el programador puede crear nuevas clases que mediante
herencia extiendan su funcionalidad y se integren a la perfección con el resto de clases de la
BCL.

Por ejemplo, implementando ciertos interfaces podemos crear nuevos tipos de colecciones
que serán tratadas exactamente igual que cualquiera de las colecciones incluidas en la BCL.

Esta librería está escrita en CIL, por lo que puede usarse desde cualquier lenguaje cuyo
compilador genere CIL. 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 servicios Web y páginas ASP.NET.

Es tal la riqueza de servicios que ofrece que incluso es posible crear lenguajes que carezcan de
librería de clases propia y sólo se basen en la BCL -como C#.

Dada la amplitud de la BCL, 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 Utilidad de los tipos de datos que contiene


System Tipos muy frecuentemente usados, como los tipos
básicos, tablas, excepciones, fechas, números aleatorios,
recolector de basura, entrada/salida en consola, etc.
System.Collections Colecciones de datos de uso común como pilas, colas,
listas, diccionarios, etc.
System.Data Manipulación de bases de datos. Forman la denominada
arquitectura ADO.NET.
System.IO Manipulación de archivos y otros flujos de datos.
System.Net Realización de comunicaciones en red.
System.Reflection Acceso a los metadatos que acompañan a los módulos de
código.
System.Runtime.Remoting Acceso a objetos remotos.

11
System.Security Acceso a la política de seguridad en que se basa el CLR

System.Threading Manipulación de hilos.


System.Web.UI.WebControls Creación de interfaces de usuario basadas en ventanas para
aplicaciones Web.
System.Winforms Creación de interfaces de usuario basadas en ventanas para
aplicaciones estándar.
System.XML Acceso a datos en formato XML.

Tabla: Espacios de nombres de la BCL más usados

2.3 Comentarios

Después de las instrucciones using, la línea siguiente contiene un comentario.


Los comentarios son útiles para incluir notas personales o destinadas a otros programadores.

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.
Suelen usarse para incluir información sobre el autor del código, para aclarar el significado o el
porqué de determinadas secciones de código, para describir el funcionamiento de los métodos
de las clases, etc.

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>*/

Estos comentarios pueden abarcar tantas líneas como sea necesario. Po ejemplo:

/* Esto es un comentario
que ejemplifica cómo se escribe comentarios que ocupen varias líneas */

Ahora bien, hay que tener cuidado con el hecho de que no es posible anidar comentarios de
este tipo. Es decir, no vale escribir comentarios como el siguiente:

/* Comentario contenedor /* Comentario contenido */ */

Esto se debe a que como el compilador ignora todo el texto contenido en un comentario y sólo
busca la secuencia */ que marca su final, ignorará el segundo /* y cuando llegue al primer */
considerará que ha acabado el comentario abierto con el primer /* (no el abierto con el
segundo) y pasará a buscar código. Como el */ sólo lo admite si ha detectado antes algún
comentario abierto y aún no cerrado (no mientras busca código), cuando llegue al segundo */
considerará que ha habido un error ya que encontrará el */ donde esperaba encontrar código.
12
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 de 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>

Y un ejemplo de su uso es:

// Este comentario ejemplifica como escribir comentarios abreviados 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

Existen diferentes tipos de comentarios:


- Comentarios de una línea:

//Hola bienvenido a intro programan en c#


///<sumary>
///este es un comentario especial de documentación XML
/// </sumary>
- Comemntarios de varias líneas:

/* Este comentario ocupa


dos líneas */

2.4 Palabras reservadas


Aunque antes no se han dado una serie de restricciones sobre cuáles son los nombres válidos
que se pueden dar en C# a los identificadores, se debe tomar en cuenta lo subsiguiente: los
sucesivos nombres no son válidos como identificadores ya que tienen un significado especial
en el lenguaje:

abstract, as, base, bool, break, byte, case, catch, char, checked, class, const,
continue, decimal, default, delegate, do, double, else, enum, event, explicit,
extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface,
internal, lock, is, long, namespace, new, null, object, operator, out, override,
params, private, protected, public, readonly, ref, return, sbyte, sealed, short,
sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint,
ulong, unchecked, unsafe, ushort, using, virtual, void, while

2.5 Namespace

13
La palabra clave namespace se utiliza para declarar un ámbito.
La capacidad de crear ámbitos dentro del proyecto permite organizar el código y le permite
crear tipos únicos globales.

2.6 Console

Cuando se inicia una aplicación de consola, el sistema operativo asocia automáticamente tres
arreglos de Entrada y Salida con la consola: flujo de entrada estándar, salida estándar, y el
flujo de salida de error estándar.

Así la aplicación puede leer la entrada del usuario (flujo de entrada estándar); escribir datos
normalmente en pantalla (flujo de salida estándar); y escribir datos de error en la pantalla
(flujo de salida de error estándar).

Estos flujos se presentan para la aplicación como los valores de la P: System.Console.In, P:


System.Console.Out, y P: propiedades System.Console.Error.

2.7 Class

La palabra clave class sirve para declarar las clases, como se muestra en la anterior figura. En
la línea: class Clase1, la clase se llama Clase1

Una clase es la definición de las características concretas de un determinado tipo de objetos.


Es decir, de cuáles son los datos y los métodos de los que van a disponer todos los objetos de
ese tipo. Por esta razón, se suele decir que el tipo de dato de un objeto es la clase que define
las características del mismo.

Sintaxis de definición de clases

La sintaxis básica para definir una clase es la que a continuación se muestra:


class <nombreClase>
{
<miembros>
}

De este modo se definiría una clase de nombre <nombreClase> cuyos miembros son los
definidos en <miembros> Los miembros de una clase son los datos y métodos de los que van a
disponer todos los objetos de la misma. Un ejemplo de cómo declarar una clase de nombre A
que no tenga ningún miembro es la siguiente:

class A
{}

14
Una clase así declarada no dispondrá de ningún miembro a excepción de los implícitamente
definidos de manera común para todos los objetos que creemos en C#. Todas las clases en c#
se derivan de la clase primaria: System.Object.

El lenguaje de C# utiliza las clases para organizar y empaquetar el código. De hecho, todo el
código ejecutable de C# debe estar contenido en una clase.

Los programas de consola de C# generalmente utilizan los servicios de entrada y salida


proporcionados por la clase Console de .NET Framework.

La instrucción Console.WriteLine("Hello, World!"); utiliza el método WriteLine. Muestra su


parámetro de cadena en la ventana de línea de comandos seguida de una nueva línea. Otros
métodos de Console se utilizan para otras operaciones de entrada y salida (La clase Console es
un miembro del espacio de nombresSystem).

Si no se incluyera la instrucción using System; al principio del programa, tendría que


especificar las clases de System de la siguiente manera:

System.Console.WriteLine("Hola bienvenidos a intro");

El método WriteLine es muy útil y lo utilizará a menudo si escribe aplicaciones de consola.


WriteLine puede mostrar cadenas:

System.Console.WriteLine("Hola bienvenidos a intro");


WriteLine también puede mostrar números:
int x = 42;
Console.WriteLine(x);

Si necesita mostrar varios elementos, utilice {0} para representar el primer elemento, {1} para
el segundo elemento, y así sucesivamente, de la forma siguiente.

int year = 1066;


string battle = "Battle of Hastings";
Console.WriteLine("The {0} took place in {1}.", battle, year);

El resultado presentará la siguiente apariencia:

The Battle of Hastings took place in 1066.

El lenguaje de C# utiliza las clases para organizar y empaquetar el código. De hecho, todo el
código ejecutable de C# debe estar contenido en una clase, incluso en un programa breve
como "Hola bienvenido a intro". A continuación se muestra el programa completo que
muestra "Hola bienvenido a intro" en la ventana de la consola.

15
2.8 Main()

Cualquier programa en C# debe contener un método Main, en el cual se inicia y se termina la


ejecución. Este método es donde se crean objetos y se ejecutan otros métodos. Main es un
método static que reside dentro de una clase o una estructura.

Los métodos Main pueden definirse de alguna de las siguientes formas:


- Puede devolver void:
static void Main()
{
//...
}
- También puede devolver un valor de tipo int:
static int Main()
{
//...
return 0;
}

- Puede aceptar argumentos, lo cual resulta útil para crear programas de línea de comandos:
static void Main(string[] args)
{
//...
}

- O bien
static int Main(string[] args)
{
//...
return 0;
}
El parámetro del método Main es una matriz de tipo string que representa los argumentos de
la línea de comandos utilizados para invocar el programa.
Observe que, a diferencia de C++, esta matriz no incluye el nombre del archivo ejecutable
(.exe).

16
Como se ve, hay versiones de Main() que devuelven un valor de tipo int. Un int no es más que
un tipo de datos capaz de almacenar valor enteros comprendidos entre – 2.1471483.648 y
2.1471483.647, y el número devuelto por Main() sería interpretado como código de retorno
de la aplicación.

2.9 Método

Un método es un bloque de código que contiene una serie de instrucciones.


Un programa hace que se ejecuten las instrucciones al llamar al método y especificando los
argumentos de método necesarios.

En C#, todas las instrucciones ejecutadas se realizan en el contexto de un método.


El método Main es el punto de entrada para cada aplicación de C# y se llama mediante Common
Language Runtime (CLR) cuando se inicia el programa.

Los métodos se declaran en una clase o struct especificando el nivel de acceso, como public o private,
modificadores opcionales como abstract o sealed, el valor de retorno, el nombre del método y
cualquier parámetro de método. Todas estas partes forman la firma del método.

Los parámetros de método se encierran entre paréntesis y se separan por comas.

Llamar a un método en un objeto es como acceder a un campo.


Después del nombre del objeto, agregue un punto, el nombre del método y paréntesis.
Los argumentos se enumeran entre paréntesis y están separados por comas.
Los métodos de la clase Clase1 se pueden llamar como en el ejemplo siguiente:

2.10 Variables y constantes en C#

Variables en C#

Una variable puede verse simplemente como un almacén de objetos de un determinado tipo al que
se le da un cierto nombre. Por tanto, para definir una variable sólo hay que decir cuál será el nombre
que se le dará y cuál será el tipo de datos que podrá almacenar, lo que se hace con la siguiente
sintaxis:

<tipoVariable> <nombreVariable>;

Una variable puede ser definida dentro de una definición de clase, en cuyo caso se correspondería
con el tipo de miembro que hasta ahora hemos denominado campo.

17
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 accedida desde código ubicado dentro
del método. El siguiente ejemplo muestra cómo definir variables de todos estos casos:

class A
{
int x, z;
int y;
void F(string a, string b)
{
double p;
}
}

En este ejemplo las variables x, z e y son campos de tipo int, mientras que p es una variable local de
tipo double; a y b son parámetros de tipo string. Como se muestra en el ejemplo, si un método toma
varios parámetros las definiciones de éstos se separan mediante comas (carácter: , ), y si queremos
definir varios campos o variables locales (no válido para parámetros) de un mismo tipo podemos
incluirlos en una misma definición incluyendo en <nombreVariable> sus nombres separados por
comas.

Con la sintaxis de definición de variables anteriormente dada simplemente definimos variables pero
no almacenamos ningún objeto inicial en ellas. El compilador dará un valor por defecto a los campos
para los que no se indique explícitamente ningún valor según se explica en el siguiente apartado. Sin
embargo, a la variables locales no les da ningún valor inicial, pero detecta cualquier intento de leerlas
antes de darles valor y produce errores de compilación en esos casos.

Una variable representa la localización en memoria donde una instancia de un tipo es guardada.
Una variable representa un valor numérico o de cadena o un objeto de una clase.

El valor que la variable almacena puede cambiar, pero el nombre sigue siendo el mismo. Una variable
es un tipo de campo.

El código siguiente es un ejemplo sencillo de cómo declarar una variable de entero, asignarle un valor
y, a continuación, asignarle un nuevo valor.

int x = 1; // x mantiene el valor de 1


x = 2; // ahora x mantiene el valor de 2

Tipos de variables

18
Variables locales

- Se definen dentro del método.


- Son privadas para el método
- Se destruyen a la salida del método.

Variables compartidas

- Se definen en la clase
- Permiten compartir datos entre los métodos de la clase.

Conflictos de ámbito

- El compilador no avisa se hay conflictos entre nombres de las variable locales y las de clase.

Tipos de datos básicos

Sistema común 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 Tipos de referencia

- Intrínsecos - Arrays
- Enumeraciones - Clases
- Estructuras - Interfases
- Punteros
- Delegados

* Todos los tipos de datos derivan de System.Objet sistema de tipos unificado.


* Cualquier tipo puede ser tratado como un objeto.

Comparación entre variables de tipo valor y variables tipo referencia

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

Como se ve, no se utiliza el operador new para crear objeto System.Int32, sino que directamente se
indica el literal que representa el valor a crear, con lo que la sintaxis necesaria para crear entero de
este tipo se reduce considerablemente. Es más, 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 singo 16 [-32.768, 32.767] short
UInt16 Enteros cortos sin signo 16 [0, 65.535] ushort

20
Int32 Enteros normales 32 [-2.147.483.648, 2.147.483.647] int

UInt32 Enteros normales sin signo 32 [0, 4.294.967.295] uint


Int64 Enteros largos 64 [-9.223.372.036.854.775.808, long
9.223.372.036.854.775.807]
UInt64 Enteros largos sin signo 64 [0-18.446.744.073.709.551.615] ulong
Single Reales con 7 dígitos de precisión 32 [1,5×10-45 - 3,4×1038] float
Double Reales con 15-16 dígitos de 64 [5,0×10-324 - 1,7×10308] double
precisión
Decimal Reales con 28-29 dígitos de 128 [1,0×10-28 - 7,9×1028] decimal
precisión
Bolean Valores lógicos 32 true, false bool
Char Caracteres Unicode 16 *‘\u0000’, ‘\uFFFF’+ char
Sring Cadena de caracteres Variable El permitido por la memoria string
Objet Cualquier objeto Variable Cualquier objeto objet

Tabla: 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 da a los campos de tipos básicos consiste en poner a cero toda 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’, y los de tipo
string y object con null.
Inicialización de variables

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;
21
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 variable String se puede inicializar directamente

string s = "Hola";

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

Ámbito y Visibilidad:

22
Constantes en C#
23
 El modificador const permite definir variables constantes.
 Una constante no cambia nunca su valor.
 Son implícitamente static
 Una constante es otro tipo de campo.

Contiene un valor que se asigna cuando se compila el programa y nunca cambia después. Las
constantes se declaran con la palabra clave const; son útiles para que el código sea más legible.

const int limite = 55;


const double pi = 3.14159265358979323846264338327950;

3. Instrucciones

Concepto de instrucción

Toda acción que se pueda realizar en el cuerpo de un método, como definir variables locales, llamar a
métodos, asignaciones y muchas cosas más que veremos a lo largo de este tema, son instrucciones.

Las instrucciones se agrupan formando bloques de instrucciones, que son listas de instrucciones
encerradas entre llaves que se ejecutan una tras otra. Es decir, la sintaxis que se sigue para definir un
bloque de instrucciones es:

{
<lista Instrucciones>
}

Las acciones que realiza un programa se expresan en instrucciones. Las acciones comunes incluyen la
declaración de variables, la asignación de valores, la llamada a métodos, el recorrido en bucle de las
colecciones y la creación de bifurcaciones a uno u otro bloque de código en función de una condición
determinada. El orden en que se ejecutan las instrucciones en un programa se denomina flujo de
control o flujo de ejecución. El flujo de control puede variar cada vez que se ejecuta un programa,
dependiendo de cómo reacciona éste a la entrada que recibe en tiempo de ejecución.
Una instrucción puede estar compuesta por una única línea de código que finaliza en un punto y coma
o por una serie de instrucciones de una línea incluidas en un bloque. Un bloque de instrucciones se
encierra entre corchetes {} y puede contener bloques anidados. En el código siguiente se muestran un
ejemplo de instrucciones de una línea:

24
3.1 Tipos de instrucciones:
En la tabla siguiente se enumeran los diferentes tipos de instrucciones de C# y sus palabras clave
asociadas, con vínculos a temas que incluyen más información (Microsoft, 2016):

Categoría Palabras clave de C# / notas

Instrucciones de Una instrucción de declaración introduce una nueva variable o constante. Una declaración de
declaración variable puede asignar opcionalmente un valor a la variable. En una declaración de constante,
se requiere la asignación.
C#

// Variable declaration statements.


double area;
double radius = 2;

// Constant declaration statement.


const double pi = 3.14159;

Instrucciones de Las instrucciones de expresión que calculan un valor deben almacenar el valor en una
expresión variable.
C#

// Expression statement (assignment).


area = 3.14 * (radius * radius);

// Error. Not statement because no assignment:


//circ * 2;

// Expression statement (method invocation).


System.Console.WriteLine();

// Expression statement (new object creation).


System.Collections.Generic.List<string> strings =
new System.Collections.Generic.List<string>();

Instrucciones de Las instrucciones de selección permiten crear bifurcaciones a diferentes secciones de código,
selección en función de una o varias condiciones especificadas. Para obtener más información, vea los
temas siguientes:
if, else, switch, case

Instrucciones de Las instrucciones de iteración permiten recorrer en bucle las colecciones como las matrices o

25
iteración bien realizar el mismo conjunto de instrucciones repetidamente hasta que se cumpla una
condición especificada. Para obtener más información, vea los temas siguientes:
do, for, foreach, in, while

Instrucciones de Las instrucciones de salto transfieren el control a otra sección de código. Para obtener más
salto información, vea los temas siguientes:
break, continue, default, goto, return, yield

Instrucciones de Las instrucciones de control de excepciones permiten recuperarse correctamente de


control de condiciones excepcionales que se producen en tiempo de ejecución. Para obtener más
excepciones información, vea los temas siguientes:
throw, try-catch, try-finally, try-catch-finally

Checked y Las instrucciones checked y unchecked permiten especificar si las operaciones numéricas
unchecked pueden producir un desbordamiento cuando el resultado se almacena en una variable
demasiado pequeña para contener el valor resultante .Para obtener más información,
vea checked y unchecked.

Instrucción Si marca un método con el modificador async , puede utilizar el operador await en el
await método. Cuando el control alcanza una expresión await en el método async, el control vuelve
al llamador, y el progreso en el método se suspende hasta que la tarea aguardada complete.
Cuando finaliza la tarea, la ejecución se puede reanudar en el método.
Para obtener un ejemplo, vea la sección “métodos Async” Métodos (Guía de programación de
C#).Para obtener más información, vea Programación asincrónica con Async y Await (C# y
Visual Basic).

Instrucción Un iterador realiza una iteración personalizada en una colección, como una lista o matriz. Un
yield return iterador utiliza la instrucción yield return para devolver cada elemento de uno en uno.
Cuando se alcanza una instrucción yield return , la ubicación actual en el código se recuerda.
La ejecución se reinicia desde esa ubicación cuando el iterador se denomina la próxima vez.
Para obtener más información, vea Iteradores (C# y Visual Basic).

Instrucción La instrucción fixed evita que el recolector de elementos no utilizados vuelva a ubicar una
fixed variable móvil. Para obtener más información, vea fixed.

Instrucción lock La instrucción lock permite limitar el acceso a los bloques de código a solo un subproceso a
la vez.Para obtener más información, vea lock.

Instrucciones Puede asignar una etiqueta a una instrucción y, a continuación, utilizar la palabra
con etiquetas clave goto para saltar a la instrucción con la etiqueta. (Vea el ejemplo de la fila siguiente.)

Instrucción La instrucción vacía está compuesta solo por un punto y coma. No hace nada y se puede
vacía utilizar en lugares donde se requiere una instrucción pero no es necesario realizar ninguna
acción. En los ejemplos siguientes se muestran dos usos de una instrucción vacía:
C#

void ProcessMessages()

26
{
while (ProcessMessage())
; // Statement needed here.
}

void F()
{
//...
if (done) goto exit;
//...
exit:
; // Statement needed here.
}

Instrucción Retorno (Return)

La instrucción return termina la ejecución del método en el que aparece y devuelve el control al
método que realizó la llamada. También puede devolver un valor opcional. Si el método es del
tipo void, la instrucción return se puede omitir.

Los métodos pueden devolver un valor al autor de la llamada. Si el tipo de valor devuelto, no es void,
el método puede devolver el valor mediante la utilización de la palabra clave return. Una instrucción
con la palabra clave return seguida de un valor que coincide con el tipo de valor devuelto devolverá
este valor al autor de llamada del método. La palabra clave return también detiene la ejecución del
método. Si el tipo de valor devuelto es void, una instrucción return sin un valor también es útil para
detener la ejecución del método. Sin la palabra clave return, el método dejará de ejecutarse cuando
alcance el final del bloque de código. En los métodos con un tipo de valor devuelto no nulo es
necesario usar la palabra clave return para devolver un valor.

3.2 Depuración y Tratamiento de Errores

Los errores (sintácticos y semánticos) pueden aparecer en el código de forma inesperada, En Visual
Studio se encuentran varias herramientas para la depuración de los errores.
El depurador de Visual Studio proporciona un menú Depurar que ofrece acceso a las herramientas del
depurador, Además, el lenguaje C# incorpora técnicas para controlar las posibles situaciones de error
en tiempo de ejecución.
Cuando una aplicación se ejecuta en modo de depuración, VS es capaz de conocer qué ocurre
exactamente en cada línea de código, Esa información de depuración está contenida en los archivos
.pdb
 En modo depuración podremos:
o Consultar y modificar el valor de las variables,
o Detener un momento la ejecución Editar el código y continuar la ejecución,
o Parar la ejecución en un lugar concreto,

27
o Ejecutar el programa línea a línea,
o Realizar llamadas de prueba a métodos en la ventana Inmediato sin ejecutar la
aplicación,
o Etc.

28

También podría gustarte