You are on page 1of 45

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 caractersticas y forma de trabajo de C# y .NET
- Explorar la forma de Programar en C# a travs de Consola.
-

Contenido de la Unidad: 1. Introduccin al lenguaje C# y .NET


1.1 La evolucin de los C hasta C#
1.2 Como programar en C#
2. Estructura Bsica de un Programa
2.1 Directivas using y espacios con nombres
2.2 Librera 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 Mtodo
2.10 Variables y constantes en C#
3. Instrucciones
3.1 Tipos de instrucciones
3.2 Depuracin y Tratamiento de Errores
3.3 Buenas Practicas de Programacin en C#
3.4 Convenciones del uso de Maysculas y Minsculas
4. Instrucciones de Entrada/Salida por Consola
4.1 Clculos: operadores aritmeticos +,-,*,/,%
4.2 Precedencia de los operadores matemticos en C#
4.3 Jerarqua de los operadores matemticos
4.4 Jerarqua de los operadores matemticos
5. Funciones en C#
6. Conversin de expresiones matemticas a expresiones
aritmticas.

1
1. Introduccin al lenguaje C# y .NET
C# (ledo en ingls C Sharp y en espaol C Almohadilla) es el nuevo lenguaje de propsito general
diseado por Microsoft para su plataforma .NET.

Sus principales creadores son Scott Wiltamuth y Anders Hejlsberg, ste ltimo tambin conocido por
haber sido el diseador del lenguaje Turbo Pascal y la herramienta RAD Delphi.

C# es el ltimo en una lnea de evolucin de los lenguajes derivados de C, que incluye C++ y Java.
Es utilizado por Microsoft para desarrollar la mayora del cdigo de .NET.
C# es un lenguaje orientado a objetos, moderno, simple y potente.
En C# todo es un objeto.
Actualmente, C# es un estndar ECMA (European Computer Association Manufacturing) e ISO.
Cualquiera que obtenga su especificacin puede desarrollar un compilador totalmente compatible
con la garanta del control que se ejerce sobre su evolucin.

Aunque es posible escribir cdigo para la plataforma .NET en muchos otros lenguajes, C# es el nico
que ha sido diseado especficamente para ser utilizado en ella, por lo que programarla usando C# es
mucho ms sencillo e intuitivo que hacerlo con cualquiera de los otros lenguajes ya que C# carece de
elementos heredados innecesarios en .NET. Por esta razn, se suele decir que C# es el lenguaje nativo
de .NET

La sintaxis y estructuracin de C# es muy parecida a la de C++ o Java, puesto que la intencin de


Microsoft es facilitar la migracin de cdigos 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.

Un lenguaje que hubiese sido ideal utilizar para estos menesteres es Java, pero debido a problemas
con la empresa creadora del mismo -Sun-, Microsoft ha tenido que desarrollar un nuevo lenguaje que
aadiese a las ya probadas virtudes de Java las modificaciones que Microsoft tena pensado aadirle
para mejorarlo an ms y hacerlo un lenguaje orientado al desarrollo de componentes.

En resumen, C# es un lenguaje de programacin que toma las mejores caractersticas de lenguajes


preexistentes como Visual Basic, Java o C++ y las combina en uno solo. El hecho de ser relativamente
reciente no implica que sea inmaduro, pues Microsoft ha escrito la mayor parte de la BCL usndolo,
por lo que su compilador es el ms depurado y optimizado de los incluidos en el .NET Framework SDK

Caractersticas de C#:

Con la idea de que los programadores ms experimentados puedan obtener una visin general del
lenguaje, a continuacin se recoge de manera resumida las principales caractersticas de C# Alguna de
las caractersticas aqu sealadas no son exactamente propias del lenguaje sino de la plataforma .NET
en general, y si aqu se comentan es porque tienen una repercusin directa en el lenguaje:

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

El cdigo escrito en C# es autocontenido, lo que significa que no necesita de ficheros


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

El tamao de los tipos de datos bsicos es fijo e independiente del compilador, sistema
operativo o mquina para quienes se compile (no como en C++), lo que facilita la
portabilidad del cdigo.

No se incluyen elementos poco tiles de lenguajes como C++ tales como macros,
herencia mltiple 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 aos ha ido
demostrndose son muy tiles para el desarrollo de aplicaciones y que en otros lenguajes
como Java o C++ hay que simular, como un tipo bsico decimal que permita realizar
operaciones de alta precisin con reales de 128 bits (muy til en el mundo financiero), la
inclusin de una instruccin foreach que permita recorrer colecciones con facilidad y es
ampliable a tipos definidos por el usuario, la inclusin de un tipo bsico string para
representar cadenas o la distincin de un tipo bool especfico para representar valores lgicos.

Orientacin a objetos: Como todo lenguaje de programacin de propsito general actual, C#


es un lenguaje orientado a objetos, aunque eso es ms bien una caracterstica 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 ms puro en tanto que no admiten ni funciones ni variables globales
sino que todo el cdigo 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 cdigo.

C# soporta todas las caractersticas propias del paradigma de programacin orientada a


objetos: encapsulacin, herencia y polimorfismo.

En lo referente a la encapsulacin es importante sealar que aparte de los tpicos


modificadores public, private y protected, C# aade un cuarto modificador llamado internal,
que puede combinarse con protected e indica que al elemento a cuya definicin precede slo
puede accederse desde su mismo ensamblado.

Respecto a la herencia -a diferencia de C++ y al igual que Java- C# slo admite herencia simple
de clases ya que la mltiple provoca ms quebraderos de cabeza que facilidades y en la
mayora de los casos su utilidad puede ser simulada con facilidad mediante herencia mltiple
de interfaces. De todos modos, esto vuelve a ser ms bien una caracterstica propia del CTS
que de C#.

Por otro lado y a diferencia de Java, en C# se ha optado por hacer que todos los mtodos sean
por defecto sellados y que los redefinibles hayan de marcarse con el modificador virtual (como

3
en C++), lo que permite evitar errores derivados de redefiniciones accidentales. Adems, un
efecto secundario de esto es que las llamadas a los mtodos sern ms eficientes por defecto
al no tenerse que buscar en la tabla de funciones virtuales la implementacin de los mismos a
la que se ha de llamar. Otro efecto secundario es que permite que las llamadas a los mtodos
virtuales se puedan hacer ms eficientemente al contribuir a que el tamao de dicha tabla se
reduzca.
Seguridad de tipos: C# incluye mecanismos que permiten asegurar que los accesos a tipos de
datos siempre se realicen correctamente, lo que permite evita que se produzcan errores
difciles de detectar por acceso a memoria no perteneciente a ningn objeto y es
especialmente necesario en un entorno gestionado por un recolector de basura. Para ello se
toman medidas del tipo:

Slo se admiten conversiones entre tipos compatibles. Esto es, entre un tipo y
antecesores suyos, entre tipos para los que explcitamente se haya definido un
operador de conversin, y entre un tipo y un tipo hijo suyo del que un objeto del
primero almacenase una referencia del segundo (downcasting) Obviamente, lo ltimo
slo puede comprobarlo en tiempo de ejecucin el CLR y no el compilador, por lo que
en realidad el CLR y el compilador colaboran para asegurar la correccin 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 anlisis del flujo de
control de la fuente que no se lea ninguna variable local sin que se le haya asignado
previamente algn 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 produccin de desbordamientos en operaciones aritmticas,


informndose de ello con una excepcin cuando ocurra. Sin embargo, para conseguirse
un mayor rendimiento en la aritmtica estas comprobaciones no se hacen por defecto
al operar con variables sino slo con constantes (se pueden detectar en tiempo de
compilacin)

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 mtodos simultneamente, y se comprueba que los mtodos a los que apunten
tengan parmetros y valor de retorno del tipo indicado al definirlos.

Pueden definirse mtodos que admitan un nmero indefinido de parmetros 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 recoleccin de
basura.

4
Acceso al SO, COM y APIs
Soporta el modo unsafe que permite el uso de punteros como en C.
Generacin de documentacin XML automtica.
Creacin de pginas ASP.NET y servicios Web.
El programa tiene un punto de entrada que es el mtodo Main, perteneciente a una clase. Ms
adelante se desarrollarn ejercicios que necesiten de la definicin e implementacin de clases. Por
ahora es suficiente con que en el mtodo Main se invoque la ejecucin del ejercicio que se desea
probar; de este modo, se pueden escribir en un mismo archivo de cdigo, todos los ejercicios; adems
esto favorece a la idea de que cada porcin de cdigo este documentada y realice una sola tarea.
C# es un lenguaje orientado a objetos elegante y con seguridad de tipos que permite a los
desarrolladores compilar diversas aplicaciones slidas 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 mucho, mucho ms. Visual
C# proporciona un editor de cdigo avanzado, cmodos diseadores de interfaz de usuario,
depurador integrado y numerosas herramientas ms para facilitar el desarrollo de aplicaciones
basadas el lenguaje C# y .NET Framework.
La sintaxis de C# es muy expresiva, pero tambin es sencilla y fcil 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 mtodos y tipos genricos, que proporcionan mayor rendimiento y seguridad de tipos, e
iteradores, que permiten a los implementadores de clases de coleccin definir comportamientos de
Todas las variables y mtodos, incluido el mtodo Main que es el punto de entrada de la aplicacin, se
encapsulan dentro de definiciones de clase.
Una clase puede heredar directamente de una clase primaria, pero puede implementar cualquier
nmero de interfaces. Los mtodos que reemplazan a los mtodos 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.
Adems de estos principios bsicos orientados a objetos, C# facilita el desarrollo de componentes de
software a travs de varias construcciones de lenguaje innovadoras, entre las que se incluyen las
siguientes:
Firmas de mtodos encapsulados denominadas delegados, que habilitan notificaciones de
eventos con seguridad de tipos.
Propiedades, que actan como descriptores de acceso para variables miembro privadas.
Atributos, que proporcionan metadatos declarativos sobre tipos en tiempo de ejecucin.
Comentarios en lnea de documentacin XML.
Language-Integrated Query (LINQ) que proporciona funciones de consulta integradas en una
gran variedad de orgenes de datos.

5
El proceso de compilacin de C# es simple en comparacin con el de C y C++, y es ms flexible que en
Java.
No hay archivos de encabezado independientes, ni se requiere que los mtodos y los tipos se declaren
en un orden determinado.
Un archivo de cdigo fuente de C# puede definir cualquier nmero de clases, structs, interfaces y
eventos.

1.1 La evolucin de los C hasta C#

C# es un lenguaje diseado por Microsoft para generar programas sobre la plataforma .NET. Es fruto
de una evolucin que parti con el nacimiento de C, que era un lenguaje en el que se trabajaba con
programacin estructurada, luego apareci C++ que ya permita la programacin orientada a objetos,
y por ltimo la evolucin dio lugar a C#. Este ltimo coge lo mejor de diferentes lenguajes de
programacin como C++, Visual Basic, Java o Delphi y lo mete en una coctelera, dando como
resultado un lenguaje que combina a partes iguales potencia y sencillez. De este modo adems facilita
la migracin 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. Adems
es el lenguaje de la plataforma .NET con ms y mejores ejemplos; es ms, la propia plataforma fue
desarrollada con este lenguaje.
http://toodaim.blogspot.com/2013/02/articulo-por-que-elegir-c.html

1.2 Como programar en C#

6
Para poder programar en C#, se har a travs de Visual Estudio , la cual nos muestra la siguiente
pantalla

Para compilar desde el IDE de Visual Studio, se debern realizar los siguientes pasos:

a) Crear un proyecto nuevo.


Esto se debe hacer directamente al iniciar Visual Studio, pulsando con el ratn (Muose) en la
pestaa: ARCHIVO, seguidamente en Nuevo Proyecto, como se muestra en la siguiente figura

b) Elegir como tipo de proyecto: Proyectos de Visual C#, y como plantilla Aplicacin de consola

7
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 Ubicacin). En este ejemplo se dejarn 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
mtodo Main() y un constructor (como se visualiza en la figura anterior). Como se ve, la
estructura mnima que se ofrece es una clase, ya que la filosofa C# para .NET es trabajar
nicamente con clases, no con funciones ni variables globales.

c) El siguiente paso es aadir el cdigo necesario apoyndose en las facilidades de desarrollo que
ofrece el IDE del Visual Studio

Se puede observar que, directamente, se importa el namespace System. Cuando se est


escribiendo el cdigo, despus de escribir la clase Console y el punto para invocar al mtodo
WriteLine, automticamente se presenta una ventana donde se puede elegir el nombre del
mtodo, bien con el cursor o bien escribiendo las primeras letras del mtodo. Cuando el foco
est en el mtodo, basta con pulsar RETURN y se escribe el mtodo WriteLine(). Al abrir el
parntesis, aparece la ayuda sobre el tipo de argumentos que puede recibir el mtodo.

8
d) Una vez escrito el cdigo, se ha de construir el proyecto: Se procede a compilarlo.

e) Depurar de un programa

Si dentro de la carpeta DEPURAR, se selecciona la opcin Iniciar depuracin ( F5), se visualiza


solamente los resultados de la depuracin, como se muestra en la siguiente figura

9
En cambio, si selecciona la opcin Iniciar sin depurar, muestra la pantalla con el resultado de
ejecucin, como se observa a continuacin en la siguiente figura.

2. Estructura Bsica 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, adems de otros espacios de
nombres. A continuacin, se muestra el esqueleto de un programa en C# que contiene todos
estos elementos.

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

10
Se visualiza los siguientes elementos:

2.1 Directivas using y espacios con nombres


Cuando se crea una aplicacin de consola con Visual C# Express, las primeras lneas en el
editor de cdigo 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 C# Express, se crea automticamente 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 ms comnmente utilizados en .NET Framework se muestran de
forma predeterminada cuando crea una nueva aplicacin.
Si utiliza clases de otros espacios de nombres en la biblioteca de clases, debe agregar una
directiva using para ese espacio de nombres al archivo de cdigo fuente.
Permite el uso de tipos en un espacio de nombres, de modo que no sea necesario calificar el
uso de un tipo en dicho espacio de nombres

2.2 Librera de clase base (BCL)

La Librera de Clase Base (BCL) es una librera 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 ms frecuentemente usadas a la hora de escribir programas. Adems, a partir
de estas clases prefabricadas el programador puede crear nuevas clases que mediante
herencia extiendan su funcionalidad y se integren a la perfeccin con el resto de clases de la
BCL.

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

Esta librera est escrita en MSIL, por lo que puede usarse desde cualquier lenguaje cuyo
compilador genere MSIL. A travs de las clases suministradas en ella es posible desarrollar

11
cualquier tipo de aplicacin, desde las tradicionales aplicaciones de ventanas, consola o
servicio de Windows NT hasta los novedosos servicios Web y pginas ASP.NET.

Es tal la riqueza de servicios que ofrece que incluso es posible crear lenguajes que carezcan de
librera de clases propia y slo 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 ms usados son:

Espacio de nombres Utilidad de los tipos de datos que contiene


System Tipos muy frecuentemente usados, como los tipos
bsicos, tablas, excepciones, fechas, nmeros aleatorios,
recolector de basura, entrada/salida en consola, etc.
System.Collections Colecciones de datos de uso comn como pilas, colas,
listas, diccionarios, etc.
System.Data Manipulacin de bases de datos. Forman la denominada
arquitectura ADO.NET.
System.IO Manipulacin de ficheros y otros flujos de datos.
System.Net Realizacin de comunicaciones en red.
System.Reflection Acceso a los metadatos que acompaan a los mdulos de
cdigo.
System.Runtime.Remoting Acceso a objetos remotos.
System.Security Acceso a la poltica de seguridad en que se basa el CLR
System.Threading Manipulacin de hilos.
System.Web.UI.WebControls Creacin de interfaces de usuario basadas en ventanas para
aplicaciones Web.
System.Winforms Creacin de interfaces de usuario basadas en ventanas para
aplicaciones estndar.
System.XML Acceso a datos en formato XML.

Tabla: Espacios de nombres de la BCL ms usados


2.3 Comentarios
Despus de las instrucciones using, la lnea siguiente contiene un comentario.
12
Los comentarios son tiles para incluir notas personales o destinadas a otros programadores.

Un comentario es texto que se incluye en el cdigo fuente para facilitar su lectura a los
programadores y cuyo contenido es, por defecto, completamente ignorado por el compilador.
Suelen usarse para incluir informacin sobre el autor del cdigo, para aclarar el significado o el
porqu de determinadas secciones de cdigo, para describir el funcionamiento de los mtodos
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 lneas como sea necesario. Po ejemplo:

/* Esto es un comentario
que ejemplifica cmo se escribe comentarios que ocupen varias lneas */

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 slo
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 cdigo. Como el */ slo lo admite si ha detectado antes algn
comentario abierto y an no cerrado (no mientras busca cdigo), cuando llegue al segundo */
considerar que ha habido un error ya que encontrar el */ donde esperaba encontrar cdigo.

Dado que muchas veces los comentarios que se escriben son muy cortos y no suelen ocupar
ms de una lnea, C# ofrece una sintaxis alternativa ms 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 lnea. 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 lnea

Estos comentarios de una sola lnea s que pueden anidarse sin ningn problema. Por ejemplo,
el siguiente comentario es perfectamente vlido:

// Comentario contenedor // Comentario contenido

13
Existen diferentes tipos de comentarios:
- Comentarios de una lnea:

//Hola bienvenido a intro programan en c#


///<sumary>
///este es un comentario especial de documentacin XML
/// </sumary>
- Comemntarios de varias lneas:

/* Este comentario ocupa


dos lneas */

2.4 Palabras reservadas


Aunque antes se han dado una serie de restricciones sobre cules son los nombres vlidos que
se pueden dar en C# a los identificadores, falta todava por dar una: los siguientes nombres no
son vlidos 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
La palabra clave namespace se utiliza para declarar un mbito.
La capacidad de crear mbitos dentro del proyecto permite organizar el cdigo y le permite
crear tipos nicos globales.

2.6 Console
Cuando se inicia una aplicacin de consola, el sistema operativo asocia automticamente tres
E / S arroyos con la consola: flujo de entrada estndar, salida estndar, y la corriente de salida
de error estndar.

Su aplicacin puede leer la entrada del usuario de la corriente de entrada estndar; escribir
datos normales en el flujo de salida estndar; y escribir datos de error a la corriente de salida
de error estndar.

Estas corrientes se presentan para su aplicacin como los valores de la P: System.Console.In, P:


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

2.7 Class

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

Una clase es la definicin de las caractersticas concretas de un determinado tipo de objetos.


Es decir, de cules son los datos y los mtodos de los que van a disponer todos los objetos de
ese tipo. Por esta razn, se suele decir que el tipo de dato de un objeto es la clase que define
las caractersticas del mismo.

Sintaxis de definicin de clases


La sintaxis bsica para definir una clase es la que a continuacin se muestra:
class <nombreClase>
{
<miembros>
}

De este modo se definira una clase de nombre <nombreClase> cuyos miembros son los
definidos en <miembros> Los miembros de una clase son los datos y mtodos de los que van a
disponer todos los objetos de la misma. Un ejemplo de cmo declarar una clase de nombre A
que no tenga ningn miembro es la siguiente:

class A
{}
Una clase as declarada no dispondr de ningn miembro a excepcin de los implcitamente
definidos de manera comn para todos los objetos que creemos en C#. Estos miembros los
veremos dentro de poco en este mismo tema bajo el epgrafe La clase primegina:
System.Object.

El lenguaje de C# utiliza las clases para organizar y empaquetar el cdigo. De hecho, todo el
cdigo 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 instruccin Console.WriteLine("Hello, World!"); utiliza el mtodo WriteLine. Muestra su
parmetro de cadena en la ventana de lnea de comandos seguida de una nueva lnea. Otros
mtodos 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 instruccin using System; al principio del programa, tendra que
especificar las clases deSystem de la siguiente manera:

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

El mtodo 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 tambin puede mostrar nmeros:
15
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 cdigo. De hecho, todo el cdigo
ejecutable de C# debe estar contenido en una clase, incluso en un programa breve como "Hola
bienvenido a intro". A continuacin se muestra el programa completo que muestra "Hola bienvenido a
intro" en la ventana de la consola.

2.8 Main()
Cualquier programa en C# debe contener un mtodo Main, en el cual se inicia y se termina la
ejecucin. Este mtodo es donde se crean objetos y se ejecutan otros mtodos. Main es un
mtodo static que reside dentro de una clase o una estructura.

Los mtodos Main pueden definirse de alguna de las siguientes formas:


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

- Puede aceptar argumentos, lo cual resulta til para crear programas de lnea de comandos:

16
static void Main(string[] args)
{
//...
}

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

Como se ve, hay versiones de Main() que devuelven un valor de tipo int. Un int no es ms que
un tipo de datos capaz de almacenar valor enteros comprendidos entre 2.1471483.648 y
2.1471483.647, y el nmero devuelto por Main() sera interpretado como cdigo de retorno
de la aplicacin.

2.9 Mtodo
Un mtodo es un bloque de cdigo que contiene una serie de instrucciones.
Un programa hace que se ejecuten las instrucciones al llamar al mtodo y especificando los
argumentos de mtodo necesarios.

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


El mtodo Main es el punto de entrada para cada aplicacin de C# y se llama mediante Common
Language Runtime (CLR) cuando se inicia el programa.

Los mtodos 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 mtodo y
cualquier parmetro de mtodo.Todas estas partes forman la firma del mtodo.

Los parmetros de mtodo se encierran entre parntesis y se separan por comas.

Llamar a un mtodo en un objeto es como acceder a un campo.


Despus del nombre del objeto, agregue un punto, el nombre del mtodo y parntesis.
Los argumentos se enumeran entre parntesis y estn separados por comas.
Los mtodos de la clase Clase1 se pueden llamar como en el ejemplo siguiente:

2.10 Variables y constantes en C#


17
Variables en C#

Una variable puede verse simplemente como un almacn de objetos de un determinado tipo al que
se le da un cierto nombre. Por tanto, para definir una variable slo hay que decir cul ser el nombre
que se le dar y cul 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 definicin de clase, en cuyo caso se correspondera
con el tipo de miembro que hasta ahora hemos denominado campo.

Tambin puede definirse como un variable local a un mtodo, que es una variable definida dentro del
cdigo del mtodo a la que slo puede accederse desde dentro de dicho cdigo. Otra posibilidad es
definirla como parmetro de un mtodo, que son variables que almacenan los valores de llamada al
mtodo y que, al igual que las variables locales, slo puede ser accedidas desde cdigo ubicado
dentro del mtodo. El siguiente ejemplo muestra cmo definir variables de todos estos casos:

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

En este ejemplo las variables x, z e y son campos de tipo int, mientras que p es una variable local de
tipo Persona y a y b son parmetros de tipo string. Como se muestra en el ejemplo, si un mtodo
toma varios parmetros las definiciones de stos se separan mediante comas (carcter ,), y si
queremos definir varios campos o variables locales (no vlido para parmetros) de un mismo tipo
podemos incluirlos en una misma definicin incluyendo en <nombreVariable> sus nombres separados
por comas.

Con la sintaxis de definicin de variables anteriormente dada simplemente definimos variables pero
no almacenamos ningn objeto inicial en ellas. El compilador dar un valor por defecto a los campos
para los que no se indique explcitamente ningn valor segn se explica en el siguiente apartado. Sin
embargo, a la variables locales no les da ningn valor inicial, pero detecta cualquier intento de leerlas
antes de darles valor y produce errores de compilacin en esos casos.

Una variable representa la localizacin en memoria donde una instancia de un tipo es guardada.
Una variable representa un valor numrico o de cadena o un objeto de una clase.
18
El valor que la variable almacena puede cambiar, pero el nombre sigue siendo el mismo. Una variable
es un tipo de campo.
El cdigo siguiente es un ejemplo sencillo de cmo declarar una variable de entero, asignarle un valor
y, a continuacin, 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

Variables locales

- Se definen dentro del mtodo.


- Son privadas para el mtodo
- Se destruyen a la salida del mtodo.

Variables compartidas

- Se definen en la clase
- Permiten compartir datos entre los mtodos de la clase.

Conflictos de mbito

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

Tipos de datos bsicos

Sistema comn de tipos (CTS)


* Lo comparten todos los lenguajes de .NET
* Admite tanto tipos de valor como tipos de referencia:

Tipos de datos

Tipos de valor Tipos de referencia

- Intrnsecos - Arrays
- Enumeraciones - Clases
- Estructuras - Interfases
- Punteros
- Delegados 19
* Todos los tipos de datos derivan de System.Objet sistema de tipos unificado.
* Cualquier tipo puede ser tratado como un objeto.

Comparacin entre variables de tipo valor y variables tipo referencia

Los tipos de datos bsicos son ciertos tipos de datos tan comnmente utilizados en la escritura de
aplicaciones que en C# se ha incluido una sintaxis especial para tratarlos.
Por ejemplo, para representar nmeros 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 ms, dado lo frecuente que es el uso de este tipo tambin
se ha predefinido en C# el alias int para el mismo, por lo que la definicin de variable anterior queda
as de compacta:

int a = 2;

System.Int32 no es el nico tipo de dato bsico incluido en C#.


En el espacio de nombres System se han incluido todos estos:

Tipo Descripcin Bits Rango de valores Alias

20
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
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 dgitos de precisin 32 [1,510-45 - 3,41038] float
Double Reales con 15-16 dgitos de 64 [5,010-324 - 1,710308] double
precisin
Decimal Reales con 28-29 dgitos de 128 [1,010-28 - 7,91028] decimal
precisin
Bolean Valores lgicos 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 bsicos

Pese a su sintaxis especial, en C# los tipos bsicos 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 mtodo que espere un System.Object, lo que es muy til para el diseo de rutinas
genricas que admitan parmetros de cualquier tipo y es una ventaja importante de C# frente a
lenguajes similares como Java donde los tipos bsicos no son considerados objetos.

El valor que por defecto se da a los campos de tipos bsicos consiste en poner a cero toda el rea de
memoria que ocupen. Esto se traduce en que los campos de tipos bsicos numricos 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.
Inicializacin de variables

bool bln = true;


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

Los valores de referencia son creados con la palabra reservada new:

object o = new System.Object();

Una variable String se puede inicializar directamente

string s = "Hola";

C# soporta secuencias de escape como en C:

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


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

Como las sentencias de escape comienzan con \,


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

mbito y Visibilidad:

22
Constantes en C#
23
El modificador const permite definir variables constantes.
Una constante no cambia nunca su valor.
Son implcitamente static

Una constante es otro tipo de campo.


Contiene un valor que se asigna cuando se compila el programa y nunca cambia despus. Las
constantes se declaran con la palabra clave const; son tiles para que el cdigo sea ms legible.

const int limite = 55;


const double pi = 3.14159265358979323846264338327950;

3. Instrucciones

Concepto de instruccin

Toda accin que se pueda realizar en el cuerpo de un mtodo, como definir variables locales, llamar a
mtodos, asignaciones y muchas cosas ms 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
declaracin de variables, la asignacin de valores, la llamada a mtodos, el recorrido en bucle de las
colecciones y la creacin de bifurcaciones a uno u otro bloque de cdigo en funcin de una condicin
determinada. El orden en que se ejecutan las instrucciones en un programa se denomina flujo de
control o flujo de ejecucin. El flujo de control puede variar cada vez que se ejecuta un programa,
dependiendo de cmo reacciona ste a la entrada que recibe en tiempo de ejecucin.
Una instruccin puede estar compuesta por una nica lnea de cdigo que finaliza en un punto y coma
o por una serie de instrucciones de una lnea incluidas en un bloque. Un bloque de instrucciones se
encierra entre corchetes {} y puede contener bloques anidados. En el cdigo siguiente se muestran un
ejemplo de instrucciones de una lnea :

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 vnculos a temas que incluyen ms informacin:

Categora Palabras clave de C# / notas

Instrucciones de Una instruccin de declaracin introduce una nueva variable o constante. Una declaracin de
declaracin variable puede asignar opcionalmente un valor a la variable. En una declaracin de constante,
se requiere la asignacin.
C#

// Variable declaration statements.


double area;
double radius = 2;

// Constant declaration statement.


const double pi = 3.14159;

Instrucciones de Las instrucciones de expresin que calculan un valor deben almacenar el valor en una
expresin 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 seleccin permiten crear bifurcaciones a diferentes secciones de cdigo,
seleccin en funcin de una o varias condiciones especificadas. Para obtener ms informacin, vea los
temas siguientes:
if, else, switch, case

Instrucciones de Las instrucciones de iteracin permiten recorrer en bucle las colecciones como las matrices o
iteracin bien realizar el mismo conjunto de instrucciones repetidamente hasta que se cumpla una
condicin especificada. Para obtener ms informacin, vea los temas siguientes:
do, for, foreach, in, while

Instrucciones de Las instrucciones de salto transfieren el control a otra seccin de cdigo.Para obtener ms
salto informacin, vea los temas siguientes:

25
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 ejecucin. Para obtener ms
excepciones informacin, vea los temas siguientes:
throw, try-catch, try-finally, try-catch-finally

Checked y Las instrucciones checked y unchecked permiten especificar si las operaciones numricas
unchecked pueden producir un desbordamiento cuando el resultado se almacena en una variable
demasiado pequea para contener el valor resultante .Para obtener ms informacin,
vea checked y unchecked.

Instruccin Si marca un mtodo con el modificador async , puede utilizar el operador espera en el
await mtodo. Cuando el control alcanza una expresin await en el mtodo async, el control vuelve
al llamador, y el progreso en el mtodo se suspende hasta que la tarea aguardada complete.
Cuando finaliza la tarea, la ejecucin se puede reanudar en el mtodo.
Para obtener un ejemplo, vea la seccin mtodos Async Mtodos (Gua de programacin de
C#).Para obtener ms informacin, vea Programacin asincrnica con Async y Await (C# y
Visual Basic).

Instruccin Un iterador realiza una iteracin personalizada en una coleccin, como una lista o matriz.Un
yield return iterador utiliza la instruccin retorno de produccin para devolver cada elemento de uno en
uno. Cuando se alcanza una instruccin yield return , la ubicacin actual en el cdigo se
recuerda. La ejecucin se reinicia desde esa ubicacin cuando el iterador se denomina la
prxima vez.
Para obtener ms informacin, vea Iteradores (C# y Visual Basic).

Instruccin La instruccin fixed evita que el recolector de elementos no utilizados vuelva a ubicar una
fixed variable mvil. Para obtener ms informacin, vea fixed.

Instruccin lock La instruccin lock permite limitar el acceso a los bloques de cdigo a solo un subproceso a
la vez.Para obtener ms informacin, vea lock.

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

Instruccin La instruccin vaca est compuesta solo por un punto y coma. No hace nada y se puede
vaca utilizar en lugares donde se requiere una instruccin pero no es necesario realizar ninguna
accin. En los ejemplos siguientes se muestran dos usos de una instruccin vaca:
C#

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

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

Instruccin Retorno (Return)


La instruccin return termina la ejecucin del mtodo en el que aparece y devuelve el control al
mtodo que realiz la llamada. Tambin puede devolver un valor opcional. Si el mtodo es del
tipo void, la instruccin return se puede omitir.

Los mtodos pueden devolver un valor al autor de llamada.Si el tipo de valor devuelto, el tipo enumerado antes
del nombre de mtodo, no es void, el mtodo puede devolver el valor mediante la utilizacin de la palabra
clave return.Una instruccin 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 mtodo.La palabra clave return tambin detiene la
ejecucin del mtodo.Si el tipo de valor devuelto es void, una instruccin return sin un valor tambin es til
para detener la ejecucin del mtodo.Sin la palabra clave return, el mtodo dejar de ejecutarse cuando alcance
el final del bloque de cdigo.Los mtodos con un tipo de valor devuelto no nulo son necesarios para usar la
palabra clave return para devolver un valor.

3.2 Depuracin y Tratamiento de Errores

Los errores (sintcticos y semnticos) pueden aparecer en el cdigo de forma inesperada.


Visual Studio ofrece potentes y eficaces herramientas para la depuracin de los errores.
El depurador de Visual Studio proporciona un men Depurar que ofrece acceso a las
herramientas del depurador.
Adems, el lenguaje C# incorpora tcnicas para controlar las posibles situaciones de error en
tiempo de ejecucin.
Cuando una aplicacin se ejecuta en modo de depuracin
VS es capaz de conocer qu ocurre exactamente en cada lnea de cdigo.
Esa informacin de depuracin est contenida en los ficheros .pdb
En modo depuracin podremos:
o Consultar y modificar el valor de las variables,
o Detener un momento la ejecucin Editar el cdigo y continuar la ejecucin,

27
o Parar la ejecucin en un lugar concreto,
o Ejecutar el programa lnea a lnea,
o Realizar llamadas de prueba a mtodos en la ventana Inmediato sin ejecutar la
aplicacin,
o Etc.

3.3 Buenas Practicas de Programacin en C#

1. En C#: Utilizar tipos especficos de C# (alias) en lugar de los tipos definidos en el namespace
System.

2. Para comparar dos strings se debe utilizar el String.Equal pasndole cmo parmetro el
StringComparison para evitar diferencias entre maysculas y minsculas, as como tambin las
diferentes culturas.

3. Utilizar String.Empty en lugar de .

4. Evitar mtodos y propiedades pblicas, a menos que sea estrictamente necesario accederlas
desde afuera de la clase. Utilizar el keyword internal si estos miembros deben ser accedidos desde
dentro del mismo assembly.

5. Utilizar el archive AssemblyInfo para completar informacin como Nmero de versin,


Descripcin, Compaa, Copyright, etc.

6. Al abrir conexiones a bases de datos, Sockets, Streams, etc. siempre cerrarlos en los bloques
finally. Esto asegurar que an ante la eventualidad de una excepcin, estos accesos sern cerrados.
Se puede usar el Using en caso de no tener que capturar una excepcin en particular dentro del catch.

7. La declaracin de las variables locales de un mtodo, deber realizarse en el bloque superior de


ste. Todas las variables deben estar declaradas en el mismo lugar y deben ser inicializadas para
limpiar su valor predeterminado.

8. Utilizar la clase StringBuilder en lugar de String cuando sea requerido manipular cadenas en loops
y en operaciones de concatenacin intensivas ya que ste reporta una mejor performance. En caso de
tratarse de concatenaciones simples, utilizar String.Concat.

28
9. Utilizar el largo de cadenas para determinar si stas son vacas, en lugar de realizar una
comparacin con una cadena vaca. Si la variable puede tener el valor null, es posible tambin utilizar
el mtodo String.IsNullOrEmpty para realizar esta verificacin:

if ( String.IsNullOrEmpty(customerName))

3.4 Convenciones del uso de Maysculas y Minsculas

Muchas convenciones de nomenclatura hacen uso de las maysculas y minsculas en sus


identificadores.

Entre ellas tenemos:


1. Estilo Pascal (PascalCase)

La primera letra del identificador y la primera letra de las siguientes palabras concatenadas
estn en maysculas. El estilo de maysculas y minsculas Pascal se puede utilizar en
identificadores de tres o ms caracteres, por ejemplo:

ImageSprite
2. Estilo camelCase

La primera letra del identificador est en minscula y la primera letra de las siguientes
palabras concatenadas en mayscula, por ejemplo:

imageSprite
Ees un estilo de escritura que se aplica a frases o palabras compuestas. El nombre se debe a
que las maysculas a lo largo de una palabra en CamelCase se asemejan a las jorobas de
un camello. El nombre CamelCase se podra traducir como Maysculas/Minsculas Camello. El
trmino case se traduce como "caja tipogrfica", que a su vez implica si una letra es mayscula
o minscula y tiene su origen en la disposicin de los tipos mviles en casilleros o cajas.
Existen dos tipos de CamelCase:

UpperCamelCase, cuando la primera letra de cada una de las palabras es mayscula.


Ejemplo: EjemploDeUpperCamelCase.
lowerCamelCase, igual que la anterior con la excepcin de que la primera letra es
minscula. Ejemplo: ejemploDeLowerCamelCase.

29
3. Estilo Maysculas (ALL_CAPS)
Todas las letras del identificador se encuentran en maysculas ejemplo

IO

En la tabla siguiente se resumen las reglas de uso de maysculas y se proporcionan ejemplos de los
diferentes tipos de identificadores.

Uso de maysculas o
dentificador Ejemplo
minsculas

Class Pascal AppDomain

Tipo Enum Pascal ErrorLevel

Valores enum Pascal FatalError

Evento Pascal ValueChange

Clase de excepciones Pascal WebException


Nota Termina siempre con el sufijo
Exception.

Campo esttico de Pascal RedValue


slo lectura

Interfaz Pascal IDisposable


Nota Comienza siempre con el prefijo I.

Mtodo Pascal ToString

Espacio de nombres Pascal System.Drawing

Parmetro Camel typeName

Propiedad Pascal BackColor

Campo de instancia Camel redValue


protegido Nota Se utiliza en contadas ocasiones. Es preferible utilizar una
propiedad, en vez de un campo de instancia protegido.

Campo de instancia Pascal RedValue


pblico Nota Se utiliza en contadas ocasiones. Es preferible utilizar una
propiedad, en vez de un campo de instancia pblico.

30
4. Instrucciones de Entrada/Salida por Consola

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


proporcionados por la clase Console de .NET Framework. La instruccin Console.WriteLine("Hello,
World!"); utiliza el mtodoWriteLine. Muestra su parmetro de cadena en la ventana de lnea de
comandos seguida de una nueva lnea. Otros mtodos de Console se utilizan para otras operaciones
de entrada y salida. La clase Console es un miembro del espacio de nombres System. Si no se
incluyera la instruccin using System; al principio del programa, tendra que especificar las clases
de System de la siguiente manera:

1. Console.WriteLine();

Escribe una nueva linea en la consola, es como presionar Enter y escribir una linea. Por
ejemplo, podemos hacer:
Console.WriteLine(Lo que quiera q salga en la consola);
Tambin podremos imprimir las variables de nuestro programa, para esto hay dos formas,
pero veamos mejor dos ejemplos que son lo mismo:

//declaramos dos variables


string nombre = "Invitado";
int edad = 22;
//Imprimimos una linea en la consola de dos formas distintas
Console.WriteLine("Tu nombre es: "+nombre+" y tienes " + edad + " aos.");
//En C# se usa el operador + para concatenar cadenas
Console.WriteLine("Tu nombre es {0} y tienes {1} aos", nombre, edad);

System.Console.WriteLine("Hello World!");

El mtodo WriteLine es muy til y lo utilizar a menudo si escribe aplicaciones de consola.

WriteLine puede mostrar cadenas:

Console.WriteLine("Hello World!");

WriteLine tambin puede mostrar nmeros:

int x = 42;

Console.WriteLine(x);

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

2. Console.Write()

Hace casi lo mismo que Console.WriteLine() pero sin cambiar de lnea, o sea concatena el
texto que le pasemos al mtodo con lo que se haya escrito hasta ese momento en la consola.

3. Console.ReadLine()
Se usa para leer lo que el usuario escribi en la consola, y podemos guardarlo en una variable para despus
usarlo en nuestro programa. No hay que pasarle ningn parmetro y el programa solo continuar cuando el
usuario teclee alguna lnea y presione Enter. Podemos hacer algo como esto:

En el siguiente ejemplo veremos cmo leer una cadena de texto en una consola C# y mostrarla por pantalla.

Console.WriteLine("Escriba su nombre");
string nombre = Console.ReadLine();

Importante: Si lo que queremos es recoger lo que el usuario escriba como un tipo en especfico, por ejemplo,
un entero, deberemos usar el mtodo esttico int.Parse, por ejemplo:

int x = int.Parse(Console.ReadLine();
ya que lo que devuelve Console.ReadLine() es un string.

Para ello, declararemos una variable de tipo String llamada texto. Posteriormente a travs del
mtodo ReadLine de la clase Console, leeremos el contenido tecleado por el usuario y lo almacenaremos en
dicha variable. Finalmente, a travs del mtodo WriteLine de la claseConsole, mostraremos el contenido de la
variable texto.

using System;

32
class Ejemplo
{
public static void Main(string[] args)
{
Console.WriteLine("Introduzca un texto");
String texto;
texto=Console.ReadLine();
Console.WriteLine("El texto introducido es: " + texto);
}
}

4. Console:ReadKey()

Este mtodo resulta importante algunas veces, sobre todo cuando queremos darle varias opciones al usuario
(a, b, c, d). Aunque se puede utilizar Console.ReadLine(). En este caso, este mtodo lo que devuelve es un
objeto de tipo ConsoleKeyInfo, y se puede utilizar de la siguiente forma, por ejemplo:

Console.WriteLine("Presiona una tecla");


ConsoleKeyInfo c = Console.ReadKey();
Console.WriteLine("Presionaste la tecla "+ c.KeyChar);

Bueno, estos son algunos de los mtodos ms importantes. Veamos ahora como est compuesto un proyecto
de tipo consola. Lo primero que vemos es el namespace que se llama igual que el proyecto, luego vemos que
hay una clase Program, la cual se llama as por defecto y dentro de esta, un mtodo Main() de la siguiente
manera:

static void Main(string[] args)

4.1 Clculos: operadores aritmeticos +,-,*,/,%

Operadores

Un operador en C# es un smbolo formado por uno o ms caracteres que permite realizar una
determinada operacin entre uno o ms datos y produce un resultado.

A continuacin se describen cules son los operadores incluidos en el lenguaje clasificados


segn el tipo de operaciones que permiten realizar, aunque hay que tener en cuenta que C#
permite la redefinicin del significado de la mayora de los operadores segn el tipo de dato
sobre el que se apliquen, por lo que lo que aqu se cuenta se corresponde con los usos ms
comunes de los mismos:

33
Operaciones aritmticas: Los operadores aritmticos incluidos en C# son los tpicos de suma
(+), resta (-), producto (*), divisin (/) y mdulo (%).

Los operadores aritmticos son signos que nos indican un clculo, como suma o
multiplicacin, entre otros; a continuacin se presentan los que utilizaremos en esta
asignatura, su representacin puede variar, de acuerdo al lenguaje de programacin que se
utilice. La simbologa utilizada en los siguientes ejemplos est basada en la sintaxis del
Lenguaje de Programacin C:

Operacin Smbolo Tipo de resultado Ejemplo


Cambio de Signo - Entero o real -(-2)
(Negativo)

Divisin / real A/B


Suma + Entero o real A+3
Resta - Entero o real B2
Residuo de divisin % Entero 15 % 2
(Divisin residual)
Multiplicacin * Entero o real 3*A

7 2

Residuo 1 3 Cociente

Est claro que el smbolo de la suma ser un +, y podemos esperar cual ser el de la resta,
pero alguna de las operaciones matemticas habituales tienen smbolos menos intuitivos.

Cuando se trabaja con operadores debemos tener en cuenta el orden de los operadores que para C#
sera lo siguiente:

En primer lugar se realizarn las operaciones indicadas entre parntesis.


Luego la negacin.
Despus las multiplicaciones, divisiones y el resto de la divisin.
Finalmente, las sumas y las restas.
En caso de tener igual prioridad, se analizan de izquierda a derecha.

4.2 Precedencia de los operadores matemticos en C#

34
Asociatividad de Operadores

Todos los operadores binarios, salvo los de asignacin, son asociativos por la izquierda.

Los operadores de asignacin y el operador condicional (?) son asociativos por la derecha.

4.3 Jerarqua de los operadores matemticos


Operacin Nombre Prioridad
() Parntesis Mayor
Funciones
- Cambio de Signo
*, /,% Multiplicacin,
divisin, Residuo de
divisin
Menor
+, - Sumas y restas

Aclaracin necesaria, los parntesis NO son operadores, son signos de agrupacin y nos sirven
para indicarnos que se debe realizar primero, es decir rompen la jerarqua para que se evale
primero lo que est contenido dentro de stos.

4.4 Ejemplos en Visual Studio C# 2013

En el siguiente Ejemplo se declaran las variables a y b con sus valores asignados directamente en el
cdigo, luego las variables para cada operacin aritmtica bsica suma, resta, producto, divisin y
modulo.

Cdigo Ejemplo de Operadores en Visual C#


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace clase2_operadores_estructuras_arreglos

{
class operadores

{
static void Main(string[] args)
{

//Declaro las variables necesarias


int a,b;
double suma, resta, producto, div, modulo;

//Asignando valores a las variables


35
a = 45;
b = 100;

//Realizando las operaciones aritmticas


suma = a + b;

/*Bloque de codigo para mostrar resultados */


Console.WriteLine("*** OPERACIONES MATEMATICAS ***\n");
Console.WriteLine("Suma = {0}", suma);
Console.WriteLine("Operaciones realizadass con exito");

Console.ReadKey();

}
}
}

Cdigo Ejemplo de Operadores en Visual C#


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace clase2_operadores_estructuras_arreglos

{
class operadores

{
static void Main(string[] args)
{

//Declaro las variables necesarias


int a,b;
double suma, resta, producto, div, modulo;

//Asignando valores a las variables


a = 45;
b = 100;

//Realizando las operaciones aritmticas


suma = a + b;

36
/*Bloque de codigo para mostrar resultados */
Console.WriteLine("*** OPERACIONES MATEMATICAS ***\n");
Console.WriteLine("Suma = {0}", suma);
Console.WriteLine("Operaciones realizadass con exito");

Console.ReadKey();

}
}
}

Observaciones
Observe que para ver los valores de las variables se debe utilizar un ndice dentro de llaves, por
ejemplo mostramos la suma usando:

Console.WriteLine("Suma = {0}", suma);

SALIDA EN CONSOLA

Modificacin del programa:

Que podemos hacer para no definir un valor constante de variables dentro del cdigo, consideremos
que se quiere ingresar los valores. Para capturar la variable utilizamos.

variable = System.Console.ReadLine();

Para convertir una variable numerica ingresada.

Numero = System.Convert.ToInt32( System.Console.ReadLine() );

Por ejemplo si queremos capturar el valor de a y b


System.Console.WriteLine("Introduce el primer nmero");
a = System.Convert.ToInt32(System.Console.ReadLine());

37
System.Console.WriteLine("Introduce el segundo nmero");
b = System.Convert.ToInt32(System.Console.ReadLine());

Sugerencia de prctica,
Modifique el programa para lograr que muestre la siguiente salida.

Modifique el programa para que presente los resultados en ventanas de dialogo.

Modifique el programa para que reciba los dos valores y no sea necesario dejarlos fijos en el cdigo.

5. Funciones en C#
Para utilizar en el diseo de una solucin en C#, las funciones trigonomtricas, logartmicas y otras
funciones matemticas comunes hay que agregar using System.Math o System.Match

Sintaxis
public static class Math

Mtodos

Descripcin

Devuelve el valor absoluto de un nmero Decimal.


Abs(Decimal)

Abs(Double) Devuelve el valor absoluto de un nmero de punto flotante de


precisin doble.

38
Abs(Int16) Devuelve el valor absoluto de un entero de 16 bits con signo.

Abs(Int32) Devuelve el valor absoluto de un entero de 32 bits con signo.

Abs(Int64) Devuelve el valor absoluto de un entero de 64 bits con signo.

Abs(SByte) Devuelve el valor absoluto de un entero de 8 bits con signo.

Abs(Single) Devuelve el valor absoluto de un nmero de punto flotante de


precisin sencilla.

Acos(Double) Devuelve el ngulo cuyo coseno es el nmero especificado.

Asin(Double) Devuelve el ngulo cuyo seno es el nmero especificado.

Atan(Double) Devuelve el ngulo cuya tangente corresponde al nmero


especificado.

Atan2(Double, Double) Devuelve el ngulo cuya tangente es el cociente de dos nmeros


especificados.

BigMul(Int32, Int32) Calcula el producto completo de dos nmeros de 32 bits.

Ceiling(Decimal) Devuelve el valor integral ms pequeo que es mayor o igual que el


nmero decimal especificado.

Ceiling(Double) Devuelve el valor integral ms pequeo que es mayor o igual que el


nmero de punto flotante de precisin doble especificado.

Cos(Double) Devuelve el coseno del ngulo especificado.

Cosh(Double) Devuelve el coseno hiperblico del ngulo especificado.

DivRem(Int32, Int32, Int32) Calcula el cociente de dos nmeros enteros de 32 bits con signo y
devuelve tambin el resto de la divisin como parmetro de salida.

DivRem(Int64, Int64, Int64) Calcula el cociente de dos nmeros enteros de 64 bits con signo y
devuelve tambin el resto de la divisin como parmetro de salida.

Exp(Double) Devuelve e elevado a la potencia especificada.

39
Floor(Decimal) Devuelve el nmero entero ms grande menor o igual que el
nmero decimal especificado.

Floor(Double) Devuelve el nmero entero ms grande menor o igual que el


nmero de punto flotante de precisin doble especificado.

IEEERemainder(Double, Double) Devuelve el resto de la divisin de dos nmeros especificados.

Log(Double) Devuelve el logaritmo natural (en base e) de un nmero


especificado.

Log(Double, Double) Devuelve el logaritmo de un nmero especificado en una base


determinada.

Log10(Double) Devuelve el logaritmo en base 10 de un nmero especificado.

Max(Byte, Byte) Devuelve el mayor de dos enteros de 8 bits sin signo.

Max(Decimal, Decimal) Devuelve el mayor de dos nmeros decimales.

Max(Double, Double) Devuelve el mayor de dos nmeros de punto flotante de precisin


doble.

Max(Int16, Int16) Devuelve el mayor de dos enteros de 16 bits con signo.

Max(Int32, Int32) Devuelve el mayor de dos enteros de 32 bits con signo.

Max(Int64, Int64) Devuelve el mayor de dos enteros de 64 bits con signo.

Max(SByte, SByte) Devuelve el mayor de dos enteros de 8 bits con signo.

Max(Single, Single) Devuelve el mayor de dos nmeros de punto flotante de precisin


sencilla.

Max(UInt16, UInt16) Devuelve el mayor de dos enteros de 16 bits sin signo.

Max(UInt32, UInt32) Devuelve el mayor de dos enteros de 32 bits sin signo.

Max(UInt64, UInt64) Devuelve el mayor de dos enteros de 64 bits sin signo.

40
Min(Byte, Byte) Devuelve el menor de dos enteros de 8 bits sin signo.

Min(Decimal, Decimal) Devuelve el menor de dos nmeros decimales.

Min(Double, Double) Devuelve el menor de dos nmeros de punto flotante de precisin


doble.

Min(Int16, Int16) Devuelve el menor de dos enteros de 16 bits con signo.

Min(Int32, Int32) Devuelve el menor de dos enteros de 32 bits con signo.

Min(Int64, Int64) Devuelve el menor de dos enteros de 64 bits con signo.

Min(SByte, SByte) Devuelve el menor de dos enteros de 8 bits con signo.

Min(Single, Single) Devuelve el menor de dos nmeros de punto flotante de precisin


sencilla.

Min(UInt16, UInt16) Devuelve el menor de dos enteros de 16 bits sin signo.

Min(UInt32, UInt32) Devuelve el menor de dos enteros de 32 bits sin signo.

Min(UInt64, UInt64) Devuelve el menor de dos enteros de 64 bits sin signo.

Pow(Double, Double) Devuelve un nmero especificado elevado a la potencia


especificada.

Round(Decimal) Redondea un valor decimal al valor integral ms prximo.

Round(Decimal, Int32) Redondea un valor decimal al nmero especificado de dgitos


fraccionarios.

Round(Decimal, Int32, MidpointRounding) Redondea un valor decimal al nmero especificado de dgitos


fraccionarios.Un parmetro especifica el redondeo del valor si est a
la mitad del intervalo entre dos nmeros.

Round(Decimal, MidpointRounding) Redondea un valor decimal al entero ms prximo.Un parmetro


especifica el redondeo del valor si est a la mitad del intervalo entre
dos nmeros.

41
Round(Double) Redondea un valor de punto flotante de precisin doble al valor
integral ms cercano.

Round(Double, Int32) Redondea un valor de punto flotante de precisin doble al nmero


especificado de dgitos fraccionarios.

Round(Double, Int32, MidpointRounding) Redondea un valor de punto flotante de precisin doble al nmero
especificado de dgitos fraccionarios.Un parmetro especifica el
redondeo del valor si est a la mitad del intervalo entre dos
nmeros.

Round(Double, MidpointRounding) Redondea un valor de punto flotante de precisin doble al entero


ms cercano.Un parmetro especifica el redondeo del valor si est a
la mitad del intervalo entre dos nmeros.

Sign(Decimal) Devuelve un valor que indica el signo de un nmero decimal.

Sign(Double) Devuelve un valor que indica el signo de un nmero de punto


flotante de precisin doble.

Sign(Int16) Devuelve un valor que indica el signo de un entero de 16 bits con


signo.

Sign(Int32) Devuelve un valor que indica el signo de un entero de 32 bits con


signo.

Sign(Int64) Devuelve un valor que indica el signo de un entero de 64 bits con


signo.

Sign(SByte) Devuelve un valor que indica el signo de un entero de 8 bits con


signo.

Sign(Single) Devuelve un valor que indica el signo de un nmero de punto


flotante de precisin sencilla.

Sin(Double) Devuelve el seno del ngulo especificado.

Sinh(Double) Devuelve el seno hiperblico del ngulo especificado.

Sqrt(Double) Devuelve la raz cuadrada de un nmero especificado.

Tan(Double) Devuelve la tangente del ngulo especificado.

42
Tanh(Double) Devuelve la tangente hiperblica del ngulo especificado.

Truncate(Decimal) Calcula la parte entera de un nmero decimal especificado.

Truncate(Double) Calcula la parte entera de un nmero de punto flotante de precisin


doble especificado.

Campos
Nombre Descripcin
E Representa la base logartmica natural, especificada por la constante, e.

PI Representa la relacin entre la longitud de la circunferencia de un crculo y su


dimetro, especificada por la constante .

Ejemplo:
Disee una solucin que mediante la utilizacin de la funcin predefinida de raz
cuadrada (sqrt), calcule la raz cuadra de un nmero entero.
Solucin:

43
Las lneas de:
Console.WriteLine("La raiz cuadrada de "+x+" es "+xR2);

Console.WriteLine("La raiz cuadrada de {0} es {1} ", x,xR2);

Console.WriteLine("La raiz cuadrada de {0} es {1} ", x.ToString("00.00",


CultureInfo.InvariantCulture),xR2.ToString("00.00", CultureInfo.InvariantCulture) );

Son formatos de salida

6. Conversin de expresiones matemticas a expresiones aritmticas

44
Construccin de Expresiones aritmticas en Programacin

45

You might also like