Вы находитесь на странице: 1из 35

C sharp NET

El lenguaje C#
Los primeros rumores de que Microsoft estaba desarrollando un nuevo
lenguaje de programacin surgieron en 1998, haciendo referencia a un
lenguaje que entonces llamaban COOL y que decan era muy similar a Java.
En junio de 2000, Microsoft despej todas las dudas liberando la especificacin
de un nuevo lenguaje llamado C#. A esto le sigui rpidamente la primera
versin de prueba del entorno de desarrollo estndar (SDK) .NET, que inclua
un compilador de C#. El nuevo lenguaje estaba diseado por Anders Hejlsberg
( creador de Turbo Pascal y arquitecto de Delphi ), Scott Wiltamuth y Peter
Golde. Entonces describieron el lenguaje como "...simple, moderno, orientado a
objetos, de tipado seguro y con una fuerte herencia de C/C++".
Una muestra de esta nueva tecnologa es el nuevo lenguaje de programacin
C#. Este nuevo lenguaje orientado a objetos con nfasis en Internet se basa en
las lecciones aprendidas de los lenguajes C, C++, Java y Visual Basic. Por ello
se trata de un lenguaje que combina todas las cualidades que se pueden
esperar de un lenguaje moderno (orientacin a objetos, gestin automtica de
memoria, etc.) a la vez que proporciona un gran rendimiento.
En este curso intentaremos examinar las cualidades de este lenguaje desde lo
ms bsico a lo ms avanzado incluyendo la versin 2.0. Examinaremos paso
a paso cmo crear poderosas aplicaciones de escritorio o basadas en web.
Captulo 0
Una Breve Introduccin a los Lenguajes de Programacin
Comencemos con lo mas elemental, cuando dos o mas personas se
comunican, para transmitirse informacin, expresar ideas, noticias, conceptos y
hasta contarse algn chisme, utilizan un elemento para hacerlo y a tal elemento
lo conocemos como Lenguaje. Sin ahondar en formalidades, un lenguaje es
una herramienta para comunicarse por medio de signos, que pueden ser,
escritos, sonoros, gestuales, etc. Usualmente, al lenguaje que usamos los
humanos (independientemente del idioma) se le llama Lenguaje Natural. De
esta manera, por ejemplo, un espaol, un mexicano y un uruguayo se
comunicarn entre s usando su lenguaje natural (que en particular es
expresado en Espaol con sus variantes regionales), de forma anloga
dialogaran un australiano, un irlands y un estadounidense (seguramente
comunicndose en Ingls con sus variantes regionales). La importancia en si,
de sta herramienta, es el poder de comunicar, solicitar e incluso dar
instrucciones para realizar algo concreto. En el mundo de la informtica,
debemos ser muy precisos en como damos esas indicaciones y por ello se
procura siempre que todo sea claro, sin confusiones, contradicciones ni
ambigedades. El Lenguaje Natural humano, es complejo para ser interpretado
por mquinas, para ello, a lo largo de la historia, se han creado lenguajes
simples y concretos, para poder interactuar con mquinas. La Programacin,
es una actividad en la cual tenemos que dar instrucciones precisas a una
mquina, para que haga exactamente lo que queremos y para ello, se han
creado y perfeccionado lenguajes, conocidos hoy como Lenguajes de
Programacin.
Los actuales lenguajes de programacin tienen caractersticas que pueden
asemejarse en buen grado a los lenguajes naturales como el Espaol, Ingls, o
cualquier otro; ya que al igual que en la comunicacin oral o escrita, los
lenguajes de programacin tienen un vocabulario definido, adems de reglas
ortogrficas, de estructura, de puntuacin, es decir la sintaxis que deben seguir
y por supuesto una semntica, esto es el significado que adquieren las
conformaciones basadas en las reglas antes mencionadas.
Como en los lenguajes humanos corrientes (Lenguajes Naturales), estas reglas
deben tomarse en cuenta para que las ideas que tratamos de expresar tengan
sentido. Tambin sucede que un lenguaje de programacin cambia con el
tiempo, igual que un lenguaje natural. Si t eres un hispano-hablante sabrs
que en cada pas hispanoamericano se usan palabras que en otros pases no
se utilizan o las mismas palabras tienen un significado distinto entre pases
(esto es llamado ambigedad): el idioma Espaol ha venido evolucionando con
el tiempo y se ha adaptado a la geografa.
En este mismo sentido, el lenguaje de programacin C#.NET es una
actualizacin tcnica de otros lenguajes de programacin ms antiguos como
lo son el C, C++, Java, Visual Basic, Delphi, etc. El creador de este lenguaje
Anders Heljsberg, es un calificado profesional de la informtica que adems ha
desarrollado lenguajes y herramientas como Turbo Pascal, Delphi (de Borland
Co.) y Visual J++ (Microsoft). Por lo que C# pretende ser el siguiente eslabn
en la evolucin de los lenguajes de programacin mas avanzados, buscando
combinar en proporciones adecuadas: Potencia, Sencillez y
Actualidad/Tendencia.
La evolucin de los ordenadores (computadores) y de los lenguajes de
programacin ha sido grandsima. No hace muchos aos existan personas que
tenan que hacer agujeros en tarjetas de cartulina para poder dar instrucciones
al computador: eran las famosas tarjetas perforadas. Pocos aos despes de
esos das existan personas (y hasta ahora existen aquellos) que pueden
"hablar con el ordenador", se trata de informticos que en su poca solo
disponan de elementos de muy bajo nivel para controlar el computador, eso
hasta el da de hoy es la base de las tcnicas de cmputo, independientemente
de cuanto hayan aumentado las capacidades de memorias, velocidades de
microprocesadores, miniaturizaciones, etc.
La forma en que una mquina de cmputo recibe instrucciones es una manera
peculiar. No es la idea aqu ahondar sobre este tema, pero es importante
brindar una idea al respecto.
Supngase que se cuenta con un sistema de riego, en principio asmase algo
simple, un jardn con un dispersor de agua, que se activa o desactiva utilizando
una simple llave de encendido y apagado, como las de las luces.
De esta forma podemos decir que tenemos un sistema que interpreta o
entiende 2 instrucciones:
Llave para arriba ---> ENCENDIDO Llave hacia abajo ---> APAGADO
De esta manera el sistema se enciende o se apaga conforme alguien le da una
de estas 2 instrucciones que el mismo interpreta o "entiende".
Podemos esquematizar el referido sistema de esta forma:
[INSTRUCCIONES]====> [PROCESAMIENTO]====>[Acciones/Resultados]
Para tratar de simplificar la forma de transmitir o escribir una de esas
instrucciones, podemos decir que si al bloque de procesamiento le enviamos la
instruccin "1", implica un ENCENDIDO, es decir que le estamos pidiendo
poner en marcha el sistema. Por el contrario, si le enviamos un "0", es un
APAGADO, le estamos pidiendo detener el sistema. Hemos hecho esto, porque
como antes mencionamos, las mquinas deben trabajar con interpretaciones lo
mas concreta y simplificadas posibles. Es mas fcil para una mquina
elemental, interpretar un "1", un "0" o incluso una serie de stos nmeros [*].
As que ahora tenemos algo como un lenguaje elemental para dar indicaciones,
donde tenemos dos instrucciones:
Instruccin: ENCENDIDO............. Equivale a: 1
Instruccin: APAGADO................ Equivale a: 0
Imaginemos ahora que el sistema de riego, adems de tener encendido y
apagado, tiene otra modalidad llamada DIARIO, que simplemente provoca que
el mismo se encienda una vez al da, a una hora indicada, por un lapso
determinado (ej: 90 minutos).
As que necesitamos otra representacin o equivalencia simple para indicar
esta nueva instruccin. Reformulemos el caso anterior, de la siguiente manera:
Instruccin: ENCENDIDO .............. Equivale a: 01
Instruccin: APAGADO ................ Equivale a: 00
Instruccin: DIARIO ................. Equivale a: 10
Aadir ms para ilustrar sobre el lenguaje binario (bajo nivel) y los lenguajes de
alto nivel**** (en construccin)
Ya que hemos recalcado las similitudes entre los lenguajes de programacin y
los lenguajes naturales tambin hay que tener presente que un lenguaje de
programacin es mucho ms estricto que uno natural en el sentido de que no
pueden existir ambigedades. Es muy fcil en el idioma Espaol tener frases
que impliquen algo que ya conocemos o que signifiquen cosas diferentes. Por
el contrario los lenguajes de programacin son claros, especficos y directos,
no se admiten ambigedades ni suposiciones.
Para poder dominar un lenguaje de programacin (al igual que con los
lenguajes naturales) se requiere mucho estudio pero por sobre todo muchsima
prctica. Una persona podra leer este manual unas 500 veces pero si no pone
en prctica los conceptos ni investiga por su cuenta, jams llegar a dominar
este maravilloso lenguaje de programacin. As que: a practicar se ha dicho!
Captulo 1
Como hemos dicho C# (C Sharp) es parte de la plataforma .NET. C# es un
lenguaje orientado a objetos simple, seguro, moderno, de alto rendimiento y
con especial nfasis en internet y sus estndares (como XML). Es tambin la
principal herramienta para programar en la plataforma .NET.
Tal vez os habris preguntado Qu es la plataforma .NET? Porqu Microsoft
est invirtiendo tanto en esta nueva tecnologa? Qu es lo que es tan
novedoso? Como es que con .NET se pueden producir aplicaciones
multiplataforma? A continuacin hablaremos un poco de la plataforma .NET
La plataforma .NET

La plataforma .NET es una plataforma de desarrollo de software con especial
nfasis en el desarrollo rpido de aplicaciones, la independencia de lenguaje y
la transparencia a travs de redes.
La plataforma consta de las siguientes partes:
Un conjunto de lenguajes de programacin (C#, J#, JScript, C++
gestionado, Visual Basic.NET, y otros proyectos independientes).
Un conjunto de herramientas de desarrollo (entre ellos Monodevelop o
Visual Studio.NET de Microsoft )
Una librera de clases amplia y comn para todos los lenguajes.
Un sistema de ejecucin de Lenguaje Comn. (CLR).
Un conjunto de servidores .NET
Un conjunto de servicios .NET
Dispositivos electrnicos con soporte .NET (PDA, Celulares, etc.).
Los puntos fuertes de la plataforma son:
Independencia de lenguaje
Todos los lenguajes que conformen con los estndares .NET, sin importar cual,
podrn interoperar entre s de forma totalmente transparente, las clases podrn
ser heredadas entre unos lenguajes y otros, y se podr disfrutar de
polimorfismo entre lenguajes. Por ejemplo, si yo tengo una clase en C#, esta
clase podr ser heredada y utilizada en Visual Basic o JScript o cualquier
lenguaje .NET. Todo esto es posible por medio de una de las caractersticas de
.NET llamado Common Type System (CTS). Tambin tiene la cualidad de que
se pueden incluir ms lenguajes a la plataforma. En la actualidad existen
proyectos independientes de incluir PHP, Python, Ada y otros lenguajes en la
plataforma.
Librera de clases comn
Ms de 4000 clases, objetos y mtodos incluidos en la plataforma .NET estn
disponibles para todos los lenguajes.
Multiplataforma
Cuando un programa es compilado, no es compilado en un archivo ejecutable
sino en un lenguaje intermedio llamado Lenguaje Intermedio (IL) el cual podr
ser ejecutado por el CLR (Common Language Runtime) en la plataforma en
que el CLR est disponible (hasta el da de hoy Microsoft solamente tiene un
CLR para los sistemas operativos Windows, pero el proyecto Mono
(www.mono-project.com) y dotGNU (www.dotGNU.org) han puesto a
disposicin un CLR para GNU/Linux, MacOS y muchas otras plataformas). Los
sistemas operativos Windows XP o superiores incluyen el CLR nativamente y
SuSE Linux 9.3 o superior planea incorporar el CLR (Mono) en su distribucin
lo que quiere decir que un programa .NET podr ser compilado y ejecutado en
cualquiera de estas plataformas, o en cualquier plataforma que incluya un CLR.
El CLR compilar estos archivos IL nuevamente en cdigo de mquina en un
proceso que se conoce como JIT (justo a tiempo) el cual se ejecutar cuando
se requiera. Este proceso producir cdigo de mquina bien eficiente que se
reutilizar si es que hubiera cdigo que se repitiera, haciendo que los
programas sean ejecutados muy eficientemente.
El CRL
Windows Forms, Web Forms, Web Services
La plataforma .NET incluye un conjunto de clases especial para datos y XML
que son la base de 3 tecnologas claves: Servicios Web (Web Services), Web
Forms, y Windows Forms los cuales son poderosas herramientas para la
creacin de aplicaciones tanto para la plataforma como para el Web.
Estandarizacin
Adems de los mritos tcnicos, una de las razones del xito de la plataforma
.NET ha sido por el proceso de estandarizacin que Microsoft ha seguido (y
que ha sorprendido a ms de uno). Microsoft, en lugar de reservarse todos los
derechos sobre el lenguaje y la plataforma, ha publicado las especificaciones
del lenguaje y de la plataforma, que han sido posteriormente revisadas y
ratificadas por la Asociacin Europea de Fabricantes de Computadoras
(ECMA). Esta especificacin (que se puede descargar libremente de Internet)
permite la implementacin del lenguaje C# y de la plataforma .NET por
terceros, incluso en entornos distintos de Windows. Mono Hispano mantiene
una traduccin del estndar que describe el lenguaje C# en
http://monohispano.org/ecma/
Un resmen introductorio sobre el lenguaje C#
El lenguaje es muy sencillo, sigue el mismo patrn de los lenguajes de
programacin modernos. Incluye un amplio soporte de estructuras,
componentes, programacin orientada a objetos, manipulacin de errores,
recoleccin de basura, etc, que es construido sobre los principios de C++ y
Java. Como sabris, las clases son la base de los lenguajes de programacin
orientados a objetos, lo cual permite extender el lenguaje a un mejor modelo
para solucionar problemas. C# contiene las herramientas para definir nuevas
clases, sus mtodos y propiedades, al igual que la sencilla habilidad para
implementar encapsulacin, herencia y polimorfismo, que son los tres pilares
de la programacin orientada a objetos. C# tiene un nuevo estilo de
documentacin XML que se incorpora a lo largo de la aplicacin, lo que
simplifica la documentacin en lnea de clases y mtodos. C# soporta tambin
interfaces, una forma de estipular los servicios requeridos de una clase. Las
clases en C# pueden heredar de un padre pero puede implementar varias
interfaces. C# tambin provee soporte para estructuras, un concepto el cual ha
cambiado signifivamente desde C++. Una estructura es un tipo restringido que
no exige tanto del sistema operativo como una clase. Una estructura no puede
heredar ni dar herencias de clases pero puede implementar una interfaz. C#
provee caractersticas de componentes orientados, como propiedades, eventos
y construcciones declaradas (tambin llamados atributos). La programacin
orientada a componentes es soportada por el CLR. C# provee soporte para
acceder directamente a la memoria usando el estilo de punteros de C++ y
mucho ms.
C# frente a Java
C# y Java son lenguajes similares, de sintaxis basada en C/C++, orientados a
objetos, y ambos incluyen las caractersticas ms importantes de los lenguajes
modernos, como son la gestin automtica de memoria y la compilacin a
cdigo intermedio. Pero por supuesto, tambin hay diferencias.
Una de las diferencias ms importantes es que C# es mucho ms cercano a
C++ en cuanto a diseo se refiere. C# toma casi todos sus operadores,
palabras reservadas y expresiones directamente de C++. Tambin se han
mantenido algunas caractersticas que en Java se han desestimado. Por
ejemplo, la posibilidad de trabajar directamente con direcciones de memoria. Si
bien tanto Java como .NET proporcionan gestin automtica de memoria, en
C# es posible usar lo que se denomina "cdigo no seguro". Cuando se usa
cdigo no seguro en C# es posible operar con punteros de forma muy similar a
como se hara en C/C++, pero el cdigo que utiliza punteros se queda marcado
como no seguro y no se ejecuta en entornos en los que no tiene permisos.
C# frente a C++
Puesto que C# se ejecuta en una mquina virtual, sta se hace cargo de la
gestin de memoria y por lo tanto el uso de punteros es mucho menos
importante en C# que en C++. C# tambin es mucho ms orientado a objetos,
hasta el punto de que todos los tipos usados derivan en ltima instancia el tipo
'object'. Adems, muchos tipos se usan de forma distinta. Por ejemplo, en C#
se comprueban los lmites de los arrays antes de usarlos, evitando as que se
pueda escribir pasado el final del vector.
Al igual que Java, C# renuncia a la idea de herencia mltiple de clases
presente en C++. Sin embargo, referido a clases, C# implementa 'propiedades'
del tipo de las que existen en Visual Basic, y los mtodos de las clases son
accedidos mediante '.' en lugar de '::'.
Por qu C#?
La plataforma .NET acepta varios lenguajes. Por ahora, C#, Visual Basic, C++
gestionado, Nemerle, FORTRAN, Java, Python, etc. , y con capacidad para
aceptar prcticamente cualquier lenguaje. Entonces la pregunta es, porqu se
eligi C# en lugar de cualquier otro lenguaje?.
La razn fundamental es que C# se dise para la plataforma .NET y es capaz
de utilizar todo su potencial. Tambin es cierto que es un lenguaje "limpio" en el
sentido de que al no tener que proporcionar compatibilidad hacia atrs se ha
tenido ms libertad en el diseo y se ha puesto especial hincapi en la
simplicidad. Por ejemplo, en C# hay un tipo de clase y siempre se le aplica el
recolector de basura mientras que en C++ gestionado hay dos tipos de clases,
una a la que se aplica el recolector y otra a la que no.
Instalando lo necesario para empezar
Para poder empezar con nuestro curso debis tener instalado en vuestro
ordenador los archivos bsicos para poder compilar y ejecutar vuestros
programas. El conjunto de utilidades "Microsoft .NET Framework" y el ".NET
Framework SDK" para Windows y el proyecto MONO o dotGNU para Linux,
MacOS, BeOS proporcionan estas herramientas. Podris encontrarlas en las
siguientes direccines:
Para Windows:
http://msdn.microsoft.com/netframework/downloads/updates/default.aspx (no se
encuentra la pagina
Para Linux u otras plataformas:
Proyecto Mono
http://mono-project.com/Downloads (manual que describe distintos mtodos de
instalacin)
Proyecto dotGNU
http://dotgnu.org/pnet-packages.html
Captulo 2
Primer programa Hola Mundo!
En un alarde de originalidad, empezaremos con un simple programa que
desplegar la frase Hola Mundo!. Con este programa introduciremos las
bases de nuestro estudio. Debido a que la plataforma .NET es independiente
del sistema operativo en este libro procuraremos mantenernos imparciales en
cuanto este asunto, eso s, cuando llegue el tiempo de compilar y ejecutar
daremos ejemplos de como hacerlo tanto en Windows como en Linux (en otras
plataformas como MacOS ser lo mismo que en Linux).
Si estis utilizando un entorno de desarrollo integrado debis abrir un nuevo
proyecto de consola en C#, escribir o copiar lo que se muestra en el ejemplo
2.1 y compilad el proyecto para ver su resultado. Si prefers programar con un
editor de textos, abrid vuestro editor de texto favorito y grabad en un directorio
conocido lo que se encuentra en el ejemplo 2.1 como Programa.cs, abrid una
ventana de terminal (en linux) o una ventana de comandos (Ejecutar (Run) ->
cmd) en Windows y compilad vuestro proyecto con el siguiente comando:
En linux con MONO (en el directorio donde habis grabado vuestro
programa): mcs Programa.cs
En linux con dotGNU(en el directorio donde habis grabado vuestro
programa): cscc -o Programa.exe Programa.cs
En Windows (en el directorio donde habis grabado vuestro programa):
csc Programa.cs
De esta forma obtendris vuestro primer programa. Para ejecutarlo
simplemente escribid:
Con MONO: mono Programa.exe
Con dotGNU: ilsrun Programa.exe
O en Windows: Programa
Ejemplo 2.1 Programa Hola Mundo
//Ejemplo 2.1 - Programa Hola Mundo


class HolaMundo
{
static void Main()
{
string var="Mundo";
System.Console.WriteLine ("Hola {0}!", var);
}
}
Analicemos paso a paso nuestro programa de ejemplo:
Comentarios
En la primera lnea de nuestro programa encontramos lo siguiente: //Ejemplo
2.1 .... Esta lnea es un ejemplo de comentarios. Un comentario es una parte en
vuestro programa que ser ignorado por el compilador.
Existen tres tipos de comentarios en C#. El primer tipo es comentario de un
sola lnea. El segundo es comentario de varias lneas. El tercer tipo es para
crear documentacin. Este ltimo tipo de comentario lo estudiaremos en el
captulo 13 de este libro.
Los comentarios de una sola lnea pueden ser incluidos en lneas
independientes, en lneas que ya incluyen cdigo para comentar sobre lo que
hace esa lnea o para comentar una lnea de cdigo que no necesitamos.
Los comentarios de varias lneas sirven para incluir muchas lneas de texto o
cdigo como un comentario. Tienen una marca de inicio que dice cuando
empieza el comentario y una marca que indica el final de dicho comentario. La
marca de inicio es /* y la marca para finalizar es */ As por ejemplo tenemos:
//Este es un ejemplo de comentarios de una lnea

/*
este comentario
abarca varias lineas
*/

class HolaMundo
{
static void Main()
{
string var="Mundo";
System.Console.WriteLine ("Hola {0}!", var); //Este
comentario puede describir lo que esta funcin hace
//System.Console.WriteLine ("y esta linea no la
vamos a desplegar");
}
}
Clases, Objetos y tipos
La esencia de la programacin orientada a objetos es la creacin de nuevos
tipos. Un tipo es la representacin de un componente (Pensado en un
ordenador (un computador) que est compuesto de varios componentes). En
programacin un componente es algo que cumple una funcin. Por ejemplo, un
componente puede ser un botn en un programa. En una aplicacin podemos
tener varios botones del mismo tipo como por ejemplo botones de Aceptar,
Cancelar, etc. Porque son del mismo tipo estos botones tienen propiedades y
comportamientos similares. Pueden tener propiedades como cambiar de
"tamao", "posicin", etc. Las propiedades son las mismas pero los valores
almacenados en sus atributos pueden ser diferentes. Por ejemplo, un botn
puede tener tamao 10 y otro tamao 6. Podemos decir entonces que tenemos
varias instancias del mismo componente (o varios botones del mismo tipo) con
diferentes valores en sus atributos.
La programacin orientada a objetos es esto. Crear componentes que puedan
ser reusados. As no tenemos que programar varios componentes que cumplan
funciones similares sino solo uno que podr llevar diferentes atributos y que
podr ser reproducido (o instanciado) tantas veces como lo necesitemos.
Como en varios lenguajes de programacin orientado a objetos, en C# los tipos
o componentes son definidos por una clase (class en ingls). Las diferentes
reproducciones o instancias de un componente del mismo tipo se conoce como
objetos. Posteriormente en nuestro estudio veremos que en C# hay ms tipos
adems de las clases. Aprenderemos sobre enums, structs y delegates. Pero
por el momento nos dedicaremos a las clases.
Como hemos visto en nuestro primer programa (Ejemplo 2.1), empezamos
nuestro programa declarando el tipo de componente que vamos a utilizar (un
componente de tipo class) y su nombre HolaMundo. Para declarar nuestro
componente como una clase, primero introducimos la palabra clave class, y
despus el nombre de nuestro componente, despus de lo cual declaramos las
funciones que va a cumplir su comportamiento y sus propiedades. Todas las
funciones, comportamiento y propiedades de nuestro componente (en este
caso nuestra clase) debern estar encerrados entre llaves { }. Las llaves
delimitan el inicio y el final de dicho componente.
Mtodos o Funciones
Los mtodos o funciones son trozos de cdigo que realizan una accin, esto
es, toman unos argumentos y devuelven un valor. En C#, las funciones deben
ser declaradas dentro de un objeto, normalmente dentro de una clase.
Las funciones normalmente llevan nombre que definen su funcin. Por ejemplo,
la funcin WriteLine() de la clase Console como debis suponer "Escribe una
Lnea en la consola". De forma similar se pueden declarar clases a las que se
le aaden un nmero ilimitado de mtodos. En nuestro ejemplo 2.1 la nica
funcin que hemos definido lleva el nombre de Main() la cual es una funcin
especial que indica la entrada principal de ejecucin de un programa. Cada
programa en C# debe tener una funcin Main().
Crear nuevos mtodos o funciones
Para declarar un mtodo o funcin utilizamos el siguiente formato:
[entorno] tipo_a_retornar Nombre_de_la_Funcin ([tipo Argumento1,
tipo Argumento2,...])
{
//lneas de cdigo
}
las palabras dentro de corchetes [] son partes opcionales

De acuerdo con nuestro ejemplo 2.1, la funcin Main() cumple con el formato
establecido:
static void Main()
{
//lneas de cdigo
}
entorno: static
tipo_a_retornar: void
Nombre_de_la_Funcin: Main
Argumentos: ninguno
En nuestro ejemplo la funcin Main() tiene como entorno la palabra clave static
y como tipo_a_retornar la palabra clave void. Cuando la funcin no retorna
ningn tipo, utilizamos la palabra void. Ms adelante veremos ms tipos
adems de void. La palabra static tambin la veremos ms adelante en nuestro
estudio, por el momento debis confiar en el ejemplo y utilizarla an sin saber
lo que hace.
Podemos aadir a nuestro componente o clase un ilimitado nmero de
funciones. Por ejemplo, para aadir ms funciones a nuestro primer ejemplo
procederemos a crear una funcin que suma dos valores. Como ya habis
aprendido en esta seccin, crearemos nuestra funcin de la forma establecida.
Despus del final de la funcin Main crearemos una funcin con entorno static
que retorne el tipo int, que se llame Suma y que acepte dos argumentos de tipo
int. Para hacerla funcionar vamos a llamarla desde nuestra funcin principal:
Ejemplo 2.2 - Aadiendo funciones a nuestro programa
//Ejemplo 2.2 - Programa Hola Mundo con C# ms adicin

namespace Programa1
{
class HolaMundo
{
static void Main()
{
string var="Mundo";
System.Console.WriteLine ("Hola {0}!", var);
int num1 = 1;
int num2 = 3;
int resultado = Suma (num1, num2);
System.Console.WriteLine ("{0}+{1} = {2}", num1,
num2, resultado);
}

static int Suma(int valor1, int valor2)
{
return (valor1+valor2);
}
}
}
Probad vuestro programa, compiladlo y ejecutadlo. El resultado ser el
siguiente:
Hola Mundo!
1 + 3 = 4
sta es una pequea introduccin a funciones, ms adelante estudiaremos
ms detalladamente como crear y utilizar funciones.
Aplicaciones de consola
Las aplicaciones de consola no poseen una interfaz grfica, no tienen botones
o ventanas, poseen una interfaz basada simplemente en texto. El ejemplo que
hemos realizado hasta ahora es una aplicacin de consola que despliega texto
en la pantalla, para ello hemos utilizado la funcin WriteLine.
Como habamos visto en la introduccin, la plataforma .NET posee ms de
4000 componentes cada cual con diferentes funciones internas. En el caso de
nuestro programa hemos usado la funcin WriteLine que se encuentra dentro
del componente Console. Para poder hacer uso de funciones estticas que se
encuentran en otros componentes, en C# como en la mayora de lenguajes de
programacin orientados a objetos, debemos especificar el nombre del
componente en primer lugar seguido por un punto y a continuacin en el
nombre de la funcin. Es por esto que utilizamos la frase Console.WriteLine.
Dentro del componente Console la plataforma .NET tiene disponibles
muchsimas otras funciones que nos ayudan a disear programas de consola.
El lenguaje C# esta orientado con el paradigma de objetos y hereda muchos
elementos de C++.


Namespaces
Quiz algunos de vosotros os habris preguntado qu significa la palabra
System que est al inicio de cada programa?. Pues bien, System en este caso
representa un Espacio de nombres (namespace en ingls).
Los espacios de nombres (namespaces) se crearon principalmente para dar
ms organizacin a los componentes. La plataforma .NET tiene incorporados
muchsimos componentes y sera una tarea imposible tratar de memorizar
todos los nombres de ellos para no repetirlos. Tarde o temprano querris crear
un componente y no sabris si el nombre que queris darle ya existe o no. Para
evitarnos este problema y para poder distinguir a dnde pertenecen ciertos
componentes se han creado los espacios de nombres.
Pongamos un ejemplo para comprender este concepto. Supongamos que
deseamos crear varios componentes para una institucin educativa que se
compone de educacin primaria y educacin secundaria. Cmo podramos
crear un componente que se llame Presidente si existen 2 presidentes que
tienen funciones distintas uno para la seccin primaria y otro para la seccin
secundaria? En este caso podramos aplicar un espacio de nombres para
poder crear los componentes Presidente que cumplen distintas funciones.
Podramos crear el espacio de nombres Primaria y dentro de ste el
componente Presidente. De igual forma el espacio de nombres Secundaria y
dentro de ste el componente Presidente cada uno componentes podr tener
definiciones distintas. Para acceder a las funciones de los componentes
Presidente podramos usar:
Primaria.Presidente.nombre_de_la_funcin();
y
Secundaria.Presidente.otra_funcin();
Cada una de las dos definiciones de Presidente son independientes, no tienen
relacin entre s ya que pertenecen a dos espacios de nombre distintos.
De sta forma podremos crear componentes y funciones con el nombre que
deseemos siempre y cuando especifiquemos a qu espacio de nombres
pertenecen.
De acuerdo con la lnea de cdigo estudiada: System.Console.WriteLine ("Hola
{0}!", var); existe una funcin llamada WriteLine dentro del componente
Console dentro del nombre de espacio System. Cualquier otro componente
llamado Console dentro de otro espacio de nombres, es un componente
diferente con funciones diferentes que quizs no posea la funcin WriteLine.
Algo importante que debemos notar es que los espacios de nombres pueden
tener sub-espacios de nombres y estos a su vez sub-espacios de nombres. El
objetivo de esto, como lo hemos dicho, es mantener una organizacin de los
componentes. Los espacios de nombres, componentes y mtodos se
accedern de la misma forma como lo hemos visto a travs de un punto.
La palabra clave using
En ciertos proyectos tendremos que usar cierto espacio de nombres muchas
veces. Supongamos que estamos implementando un programa de consola y
tenemos que usar el componente Console repetidamente. Una forma de
ahorrarnos escribir System varias veces es especificar el espacio de nombres
que vamos a usar al inicio de nuestro programa con la palabra clave using. Por
ejemplo en nuestro ejemplo 2.2 si aadimos la lnea de cdigo using System; al
inicio de nuestro programa, podemos llamar al componente Console sin escribir
System al inicio:
Ejemplo 2.2 Modificado - La palabra clave using
//Ejemplo 2.2 Modificado - La palabra clave ''using''

using System;

namespace Programa1
{
class HolaMundo
{
static void Main()
{
string var="Mundo";
Console.WriteLine ("Hola {0}!", var);
int num1 = 1;
int num2 = 3;
int resultado = Suma (num1, num2);
Console.WriteLine ("{0}+{1} = {2}", num1, num2,
resultado);
}
static int Suma(int valor1, int valor2)
{
return valor1+valor2;
}
}
}
Comparando con nuestro ejemplo 2.2 original se ve en el ejemplo que ya no es
necesario poner la palabra system.Console.WriteLine, quedando
Console.WriteLine
Algo importante para tener en cuenta es que la palabra clave using no puede
ser utilizada para ahorrarse el escribir el nombre de la clase. Por ejemplo la
lnea de cdigo using System.Console es invlida y producir errores de
compilacin.
Caracteres sensibles
C# como todos los lenguajes de programacin derivados de C hace diferencia
entre caracteres en mayscula y caracteres en minscula. Esto quiere decir
que las palabrasUsing y using son distintas y por lo tanto no cumplen la misma
funcin. Debido a esto debemos tener mucho cuidado cuando escribimos
nuestros programas.
system.console.writeLine es diferente a system.Console.WriteLine y es
diferente a System.Console.WriteLine que es el nombre de espacio,
componente y mtodo que C# incorpora para desplegar texto en la consola.
Finalizada esta pequea introduccin a nuestro primer programa en C#,
pasamos al captulo 3 en donde examinaremos mas profundamente los
fundamentos de C#.
Captulo 3
En el captulo 2 hemos introducido nuestro primer programa en C#, un
programa sencillo el cual incorpora muchos temas que hemos cubierto
bsicamente y solamente en parte. En esta seccin del libro procuraremos ver
ms a fondo las partes bsicas de C#. Nos internaremos ms a fondo en la
sintaxis y la estructura de C#.
En este captulo cubriremos lo que son los tipos. Hablaremos de tipos bsicos
o internos y de cmo crear nuevos tipos. Tambin hablaremos en general de la
manipulacin de datos. Hablaremos sobre condicionales, operadores
matemticos y varios otros temas relacionados. Empecemos entonces nuestro
estudio con lo que son tipos.
Tipos
Importancia de los tipos de datos
Los tipos son la base de cualquier programa. Un tipo no es ms que un espacio
en el que se almacena una informacin, ya sean nmeros, palabras o tu fecha
de nacimiento.
Tipos en C#
C# es un lenguaje de tipeado seguro (o fuertemente tipado) lo cual quiere decir
que el programador debe definir a que tipo pertenece cada pedazo de
informacin o cada objeto que se crea. De esta forma podemos crear objetos
de tipo nmero entero, de tipo cadenas de texto, de tipo ventana, de tipo
botones, entre otros. Haciendo esto, C# nos ayudar a mantener nuestro
cdigo seguro en donde cada tipo cumple con su funcin. En todas las
operaciones el compilador comprueba los tipos para ver su compatibilidad. Las
operaciones no vlidas no se compilan. De esta forma se evitan muchos
errores y se consigue una mayor fiabilidad. Esto tambin permite a C# anticipar
de antemano la cantidad de recursos del sistema que nuestro programa
utilizar haciendo nuestro cdigo seguro y eficiente
'Los tipos en C# al igual que C++ y Java se clasifican en dos secciones: Tipos
bsicos o internos y tipos creados por el usuario. Los tipos bsicos no son ms
que alias para tipos predefinidos en la librera base de la plataforma .NET. As,
el tipo nmero entero (que se representa con la palabra clave int), no es ms
que una forma rpida de escribir System.Int32.
Dentro de estas dos secciones los tipos del lenguaje C# tambin son divididos
en dos grandes categoras: tipos por valor y tipos por referencia. Existe una
tercera categora de tipos, disponible solo cuando se usa cdigo no seguro: los
punteros, que se discutirn ms adelante cuando hablemos de los objetos
COM.
Los tipos por valor difieren de los tipos por referencia en que las variables de
los tipos por valor contienen directamente su valor, mientras que las variables
de los tipos por referencia almacenan la direccin donde se encuentran los
objetos, es por eso que se las llaman referencias. Ms adelante describiremos
como funcionan cada una de estas categoras.
Tipos bsicos o internos
Los tipos bsicos como hemos dicho son espacios predefinidos y
categorizados donde se almacena informacin. En C# tenemos los siguientes
tipos internos:
Tabla 3.1 - Tipos bsicos
Tipo
C#
Nombre para la
plataforma .NET
Con
signo?
Bytes
utilizados
Valores que soporta
bool System.Boolean No 1
true o false (verdadero o falso en
ingls)
byte System.Byte No 1 0 hasta 255
sbyte System.SByte Si 1 -128 hasta 127
short System.Int16 Si 2 -32.768 hasta 32.767
ushort System.Uint16 No 2 0 hasta 65535
int System.Int32 Si 4 -2.147.483.648 hasta 2.147.483.647
uint System.Uint32 No 4 0 hasta 4.394.967.395
long System.Int64 Si 8
-9.223.372.036.854.775.808 hasta
9.223.372.036.854.775.807
ulong System.Uint64 No 8 0 hasta 18446744073709551615
float System.Single Si 4
Approximadamente 1.5E-45 hasta
3.4E38 con 7 cifras significativas
double System.Double Si 8
Approximadamente 5.0E-324 hasta
1.7E308 con 7 cifras significativas
decimal System.Decimal Si 12
Approximadamente 1.0E-28 hasta
7.9E28 con 28 29 cifras
significativas
char System.Char 2 Cualquier carcter Unicode (16 bits)
C# tiene una ventaja y caracterstica especial sobre los dems lenguajes de
programacin modernos y es que cada vez que se crea un objeto de un tipo
bsico, stos son mapeados internamente a un tipo primitivo de la plataforma
.NET el cual es parte del CLS (Especificacin comn del lenguaje) lo cual nos
permite acceder y hacer uso de estos desde cualquier lenguaje de la
plataforma .NET. Es decir si es que creamos un objeto de tipo int (entero) en
C#, ese objeto podr ser usado como tal dentro de J#, JScript, Visual Basic
.NET y cualquier otro lenguaje que conforme los requisitos de .NET.
Escogiendo qu tipo usar
A la hora de programar deberis decidir qu tipo de variables querris usar.
Generalmente esta decisin se basa en el tipo de informacin que vayis a
usar y en el tamao de la informacin. Por ejemplo en nuestro ejemplo 2.2 del
captulo anterior necesitbamos hacer la suma de dos valores numricos por lo
que usamos dos tipos bsicos de nmero entero (usando la palabra clave int)
los cuales de acuerdo con nuestra tabla 3.1 son nmeros enteros (no pueden
llevar valores decimales) y podrn aceptar valores entre -2,147,483,648 y
2,147,483,647 lo cual es ms que suficiente para nuestro ejemplo de aadir
dos nmeros. En el caso de que necesitramos hacer uso de nmeros reales
(los cuales poseen una parte entera y una parte decimal como el nmero
10.22) podremos hacer uso del tipo float, double y decimal de acuerdo con el
tamao del nmero que necesitemos y as cada uno de los tipos tiene su uso y
capacidad de acuerdo con la tabla 3.1.
A continuacin explicaremos brevemente los tipos ms usados en C#:
Enteros
Los tipos que sirven para almacenar nmeros enteros son: byte, sbyte. short,
ushort, int, uint, long y ulong. Como se aprecia en la tabla, C# define versiones
con y sin signo para tipos con los mismos bytes utilizados. Cada tipo se
distingue por la capacidad de almacenaje.
Probablemente el tipo ms utilizado es el int, pues se utiliza para controlar
matrices, indexar arreglos (arrays) adems de las operaciones normales con
enteros. Adems, se trata de un entero de tamao medio: ms pequeo que
long y ulong, pero ms grande que byte, sbyte, short y ushort.
El siguiente ejemplo muestra la declaracin y uso de algunos tipos enteros
calculando el nmero de segundos en una hora, da y en un ao.
Ejemplo 3.1 - utilizando tipos enteros (int)
// Ejemplo 3.1 - utilizando tipos enteros (int)
using System;
class Enteros{
public static void Main()
{
int minuto = 60; //segundos por minuto
int hora = minuto*60;
int da = hora*24;
long anio = da*365;
Console.WriteLine("Segundos en un da: {0}", da);
Console.WriteLine("Segundos en un ao: {0}", anio);
}
}

De nuevo hemos usado el mtodo Console.WriteLine para imprimir los
resultados por la consola. El identificador {0} dentro de la cadena de texto
indica que se sustituye {0} por el primer argumento. si hubiera ms de un
argumento, se seguira con {1}, y as sucesivamente. Por ejemplo, las dos
lneas que utilizan Console.WriteLine se pueden simplificar as:
Console.WriteLine("En un da: {0}; en un ao: {1}", da, anio );
Tipos de coma flotante
Los tipos de coma flotante sirven para representar a nmeros con parte
fraccionaria. La representacin por supuesto puede no ser exacta, bien por
errores de la mquina, bien porque el nmero de decimales que se puede
alojar es finito.
Existen tres clases de tipos de punto flotante : float, double y decimal. De los
dos, el ms usado es double, pues es el valor que devuelven la mayora de las
funciones matemticas de la librera base.
El siguiente ejemplo calcula la raz cuadrada y el logaritmo de dos:
Ejemplo 3.2 - utilizando tipos flotantes
// Ejemplo 3.2 - utilizando tipos flotantes
using System;

class Flotante{
public static void Main()
{
int a = 2;
double log2 = Math.Log(a);
double raiz2 = Math.Sqrt(a);
Console.WriteLine("El logaritmo de dos es {0}",
log2 );
Console.WriteLine("La raiz de dos es {0}", raiz2 );
}
}
y la salida ser la siguiente:
El logaritmo de dos es 0.693147180559945
La raz de dos es 1.4142135623731

Si intentamos cambiar el tipo de log2 a otro de menos precisin, como float o
int, el compilador protestar. Esto se debe, como hemos dicho a que el valor
devuelto por Math.Log() es de tipo double y si se quiere convertir a float, pues
se perdern datos. Lo mismo ocurre con la mayora de los miembros de la
clase Math, como Math.Sin(), Math.Tan(), etc.
El tipo decimal
El tipo decimal es un tipo "nuevo" en el sentido de que no tiene equivalente en
C/C++. Es muy parecido a los tipo de coma flotante float y double.
En la aritmtica de los tipos de coma flotante ordinarios, se pueden producir
leves errores de redondeo. El tipo decimal elimina estos errores y puede
representar correctamente hasta 28 lugares decimales. Esta capacidad para
representar valores decimales sin errores de redondeo lo hace especialmente
eficaz para clculos monetarios.
El tipo bool
El tipo bool sirve para expresar los valores verdadero/falso, que en C# se
muestran con las palabras reservadas true y false.
En C#, por ejemplo, una instruccin de condicin solo puede estar gobernada
por un valor bool, no como en C/C++, que lo puede estar tambin por un
entero. De esta forma se ayuda a eliminar el error tan frecuente en
programadores de C/C++ cuando usa "=" en lugar de "==". En definitiva, la
inclusin del tipo bool en el lenguaje ayuda a la claridad del cdigo y evita
algunos errores muy comunes.
El siguiente ejemplo, muestra algunos usos del tipo bool:
Ejemplo 3.3 - utilizando tipos de decisin bool
// Ejemplo 3.1 - utilizando tipos de decisin bool
using System;
class Booleano{
public static void Main()
{
bool b;
b = true;
Console.WriteLine("b es {0}", b);
if(b)
{
Console.WriteLine("esto saldr");
}
b = false;
if(b)
{
Console.WriteLine("esto no saldr");
}
Console.WriteLine("2==2 es {0}", 2==2);
}
}
En la ltima lnea se muestra que el operador "==" tambin devuelve un valor
booleano. El resultado debera ser el siguiente:
b es True
esto saldr
2==2 es True
El tipo char
El tipo char permite almacenar un carcter en formato simple, unicode de 16
bits o caracteres de escape. Usando el formato unicode nos garantiza que los
acentos se ven de forma adecuada y adems permite la representacin de
otros alfabetos, como el japons, griego, cirlico, etc. Para introducir un carcter
se utilizan comillas simples, de forma que declarar un carcter sigue la
estructura
char letra1 = 'a'; //formato simple
char letra2 = '\u0041'; //formato Unicode que representa la letra A
char letra3 = '\n'; //formato carcter de escape
Para una lista completa de caracteres unicode podris visitar la siguiente
pgina: http://unicode.coeurlumiere.com/
La siguiente lista contiene los caracteres de escape comunes y su significado:
\' apostrofe
\" Comillas
\\ Backslash
\0 Null (nulo)
\a Alerta
\b Retroceso
\f Form feed
\n Lnea nueva
\r Retorno del carro
\t Tabulacin Horizontal
\v Tabulacin Vertical
Tipo Cadenas
Los tipos cadena (palabra clave string) son tipos que almacenan un grupo de
caracteres. En C# los tipos cadena se crean con la palabra clave string seguido
por el nombre de la variable que deseamos instanciar. Para asignar un valor a
este tipo debemos hacerlo entre comillas de la siguiente forma:
string miCadena = "Esta es una cadena de caracteres";
Debido a que el tipo cadena (string) es uno de los tipos ms usados en C#, lo
estudiaremos detalladamente ms adelante.
Convirtiendo tipos
En nuestros programas muchas veces necesitaremos cambiar de tipo a los
objetos que hayamos creado. Esto lo podremos hacer implcitamente o
explcitamente. Una conversin de tipos implcita sucede automticamente, es
decir el compilador se har cargo de esto. Una conversin explicita en cambio
se llevar a cabo nicamente cuando nosotros lo especifiquemos. Hay que
tomar en cuenta que no siempre podremos hacer una conversin de un tipo
hacia otro.
Como regla general las conversiones implcitas se llevan a cabo cuando se
desea cambiar un tipo de menor capacidad hacia un tipo de mayor capacidad
de la misma especie. Por ejemplo si deseamos crear 2 tipos enteros (misma
clase) el uno que lleve el tipo short (menor capacidad) y el otro que lleve el tipo
int (mayor capacidad) una conversin implcita de short a int se lleva a cabo en
el siguiente ejemplo:
short corto = 3;
int entero = corto; //compilar sin ningn problema
aqu sucede una conversin implcita, el valor de la variable corto (en este caso
3) que es de tipo short es asignado a la variable de tipo int sin que el
compilador nos de ningn problema ya que har una conversin de short a int
implcitamente por nosotros debido a la regla anteriormente citada.
En el caso que queramos hacer de forma inversa, es decir asignar un valor int
a una variable short, estaramos violando la regla de asignar un tipo de menor
capacidad a una variable de tipo de mayor capacidad aunque sean de la misma
clase (enteros). As el siguiente ejemplo no compilar dndonos un error:
int entero = 300;
short corto = entero; //nos dar un error de compilacin
En estos casos es cuando podremos hacer una conversin explcita. Debido a
que la informacin almacenada en la variable entero de tipo int est tambin en
el rango de capacidad del tipo short y los dos tipos son de la misma clase
(enteros) podremos hacer una conversin explicita designando entre parntesis
a que tipo queremos convertir de la siguiente manera:
int entero = 300;
short corto = (short) entero; //convertir la variable entero para
que sea del tipo short
En el ejemplo anterior, el compilador no nos dar ningn problema. Cada uno
de los tipos bsicos citados a continuacin soportar una conversin implcita o
explcita como se lo expresa en la siguiente tabla:
Conversin Implcita (I) Conversin Explcita (E)
Desde/hacia byte sbyte short ushort int uint long ulong float double decimal
byte I E I I I I I I I I I
sbyte E I I E I E I E I I I
short E E I E I E I E I I I
ushort E E E I I I I I I I I
int E E E E I E I E I I I
uint E E E E E I I I I I I
long E E E E E E I E I I I
ulong E E E E E E E I I I I
float E E E E E E E E I I E
double E E E E E E E E E I E
decimal E E E E E E E E E E I

Arreglos
En C# se pueden construir arreglos de prcticamente cualquier tipo de dato.
Los arreglos, tambin llamados vectores o arrays, no son ms que una
sucesin de datos del mismo tipo. Por ejemplo, el concepto matemtico de
vector es una sucesin de nmeros y por lo tanto es un arreglo unidimensional.
As, podemos construir arreglos de objetos, de cadenas de texto, y, por
supuesto, arreglos de enteros:
using System;

class Arreglo{
public static void Main()
{
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
Console.WriteLine( arr[1] );
}
}
Para crear un arreglo debemos especificar de qu tipo deseamos crear el
arreglo seguido por corchetes [ ] que es el distintivo del arreglo (en nuestro
ejemplo usamos int[]), seguido por la palabra clave new y el tipo y la cantidad
de parmetros que tendr nuestro arreglo. En el ejemplo anterior, por ejemplo,
se cre un arreglo arr unidimensional con capacidad para 3 enteros
(especificado por new int[3]), y luego se le asign a cada parmetro un entero
distinto (ntese que se comienza a contar a partir de 0 y el nmero del
parmetro se encuentran entre corchetes).
Existe una forma ms corta para declarar el arreglo y asignarle los valores:
int[] arr = {1,2,3}; //es exactamente lo mismo que el ejemplo
anterior
Tambin se pueden crear arreglos bidimensionales (y de la misma forma para
ms dimensiones). En ese caso la sintaxis para declarar un arreglo
bidimensional de enteros ser
int[,] arr; //declaracin de arreglos bidimensionales en C#
en contraposicin a C/C++, en el que se declarara como
int[][] arr; //declaracin de arreglos bidimensionales en
C/C++
De esta forma, un arreglo bidimensional se declarara y utilizara de la siguiente
forma:
using System;
class Arreglo2{
public static void Main()
{
int[,] arr = new int[2,2];
arr[0,0] = 1;
arr[1,0] = 2;
arr[0,1] = 3;
arr[1,1] = 4;
Console.WriteLine("El valor que posee la variable
arr[1,1] es {0}", arr[1,1] );
}
}
el resultado ser:
El valor que posee la variable arr[1,1] es 4

igual que el ejemplo anterior, podemos declarar todo el arreglo de la siguiente
forma:
int[,] arr = {{1,2},{3,4}};
Hablaremos ms sobre arreglos ms adelante
Identificadores, Variables, Constantes y Enumeraciones
Identificadores
En una aplicacin siempre se deben crear variables, constantes, mtodos,
objetos, etc. Para poder crearlos debemos asignar nombres o identificadores.
Estos identificadores deben seguir ciertas reglas:
Un identificador DEBE empezar con una letra o un signo _
Un identificador NO puede tener espacios en blanco
Un identificador NO puede llevar el mismo nombre que una palabra
clave
Despus de que el identificador empiece con una letra o un smbolo _, el
identificador puede tener cualquier cantidad de letras, lneas o nmeros.
Ejemplo:
EsteIdentificadorEsValido
_este_tambin
esteEsOtro1
esteEsOtro2
Como ejemplos invlidos tenemos:
Esto es invalido
123_Otro_invlido
int
En los ejemplos que no son vlidos, el primero contiene espacios, el segundo
empieza con nmeros y el tercero es una palabra clave lo cual no es permitido.
Nota: Es recomendado que las variables siempre empiecen con minsculas y
que sigan el patrn llamado Camello es decir que el nombre de la variable que
tenga varias palabras debe ser formado de la siguiente manera: la primera
palabra empezar con minsculas pero la segunda, tercera, etc palabras
estarn unidas a la primera y tendrn su primera letra en maysculas ejemplo:
miVariable. Tambin se ha recomendado que el nombre de Mtodos, Clases y
dems nombres que necesitamos especificar debern llevar el mismo formato
anterior con la excepcin de que la Primera letra deber ser mayscula.
Variables
Una variable es el nombre que se le da al espacio donde se almacena la
informacin de los tipos. Las variables pueden llevar cualquier nombre que
deseemos, eso s no se podr hacer uso de palabras claves de C#. En los
ejemplos anteriores hemos usado varias variables con diferentes tipos y
diferentes valores.
Para crear una variable debemos especificar a qu tipo pertenece antes del
nombre que le vamos a dar. Por ejemplo si deseamos crear una variable que
se llame var y que sea del tipo entero (int) procederemos de la siguiente
manera:
int var;
Una vez creada la variable podemos almacenar la informacin que deseamos.
Para hacerlo utilizamos el smbolo = despus del nombre de la variable.
var = 10;
Hay que tener presente que la variable como su nombre lo indica podr tomar
otros valores. Por ejemplo si deseamos que nuestra variable cambie de valor a
5 hacemos lo que habamos hecho en el ejemplo anterior pero con el nuevo
valor:
var = 5;
De ahora en adelante la variable var pasa a tener el valor de 5.
Para simplificar el proceso de creacin y asignacin de valor de una variable
podemos especificar estos dos procesos en una misma lnea.
int var = 10;
La primera vez que una variable recibe un valor se llama inicializacin de la
variable. En C# todas las variables que van a ser utilizadas deben ser
inicializadas para que vuestro programa pueda funcionar.
En caso anterior hemos creado la variable var e inicializado la variable con el
valor 10. Hay que tener cuidado que la creacin de una variable se la hace 1
sola vez y la asignacin de diferentes valores se puede hacer cuantas veces
queramos.
Constantes
Las constantes como su nombre lo indica son variables cuyo valor no puede
ser alterado. stas se utilizan para definir valores que no cambian con el
tiempo. Por ejemplo podemos definir una constante para especificar cuantos
segundos hay en una hora de la siguiente forma:
const int segPorHora = 3600;
Esta constante no podr ser cambiada a lo largo de nuestro programa. En el
caso de que queramos asignarle otro valor, el compilador nos dar un error.
Las constantes deben ser inicializadas en el momento de su creacin.
Enumeraciones
Supongamos que estamos diseando un juego y necesitamos crear una
variable para saber cul es el estado del tanque de combustible de nuestro
automvil. Suponiendo que tenemos 4 niveles en el tanque: lleno, medio, bajo y
crtico. Qu tipo de variable podramos usar para especificar estos estados?
Una forma de hacerlo podra ser si especificamos una variable de tipo int
(entero) que tome los valores de 1 para lleno, 2 para medio, 3 para bajo y 4
para crtico. Esta alternativa funcionara pero a la larga nos olvidaremos qu
nmero representaba qu. Una forma muy elegante de solucionar este
problema es utilizando el tipo enum o enumeraciones. Veamos el siguiente
ejemplo para comprender este concepto:
Ejemplo 3.1 - Control del estado de combustible
using System;
namespace Autos
{
class Control
{
enum tanque
{
lleno,
medio,
bajo,
critico,
}

static void Main()
{
tanque auto1 = tanque.lleno;
RevisarEstadoTanque(auto1);

auto1 = tanque.critico;
RevisarEstadoTanque(auto1);
}

static void RevisarEstadoTanque(tanque auto)
{
if (auto==tanque.lleno)
Console.WriteLine ("El tanque est lleno!");
if (auto==tanque.medio)
Console.WriteLine ("El tanque est por la mitad");
if (auto==tanque.bajo)
Console.WriteLine ("El tanque est casi vaco!");
if (auto==tanque.critico)
Console.WriteLine ("Alerta! tu auto se qued sin
combustible");
}

}

}
Este programa sencillo crea una enumeracin llamada tanque y dentro de ella
crea 4 constantes: lleno, medio, bajo, y critico. Dentro de nuestro programa
creamos la variable de tipo tanque llamada auto1 la cual podr tomar los
valores especificados dentro de la enumeracin. Cuando asignamos a la
variable auto1 el valor de tanque.lleno y revisamos el estado del tanque
llamando a la funcin RevisarEstadoTanque, podremos comprobar cul es el
estado actual del tanque de combustible. sta es una forma muy descriptiva de
cmo crear variables que cambien de estado, una solucin elegante y sencilla
a nuestro problema.
En realidad las constantes dentro de las enumeraciones tienen valores enteros
asignados. Estos valores pueden ser inicializados con distintos valores que
nosotros deseemos e incluso podemos especificar qu tipo de entero
queremos usar. En nuestro ejemplo anterior los valores de la enumeracin son
valores enteros del tipo int el primer elemento dentro de la enumeracin tiene
asignado el valor de 0, el siguiente el valor 1 y as sucesivamente. Esto sucede
cuando no especificamos a qu tipo queremos inicializar nuestra enumeracin
y tampoco asignamos valores a las constantes. En el siguiente ejemplo
podemos ver cmo especificar otro tipo de constantes y otros valores.
Supongamos que queremos especificar cuantos segundos hay en un minuto,
cuantos segundos hay en una hora y cuantos segundos hay en 24 horas. Con
enumeraciones lo podemos hacer de la siguiente manera:
Ejemplo 3.2 - Enumeraciones
using System;
namespace Ejemplos
{
class Enumeraciones
{
enum segundos :uint
{
minuto = 60,
hora = 3600,
dia = 86400,
}
static void Main()
{
Console.WriteLine("Existen {0} segundos en 1 minuto, {1}
segundos en 1 hora y {2} segundos en 24
horas",(uint)segundos.minuto, (uint)segundos.hora,
(uint)segundos.dia);
}
}
}
El resultado es el siguiente:
Existen 60 segundos en 1 minuto, 3600 segundos en 1 hora y 86400
segundos en 24 horas
El ejemplo anterior nos muestra otra forma de usar una enumeracin. Hay que
tener en cuenta que el tipo que va a tener la enumeracin se encuentra
despus del nombre de la enumeracin precedido por dos puntos. De esa
forma podremos especificar de qu tipo son. Como habamos dicho
anteriormente se podr utilizar cualquier tipo de la clase enteros como byte,
sbyte, short, ushort, int, uint, long o ulong. En el caso de que no se especifique
a qu tipo pertenece el compilador le dar el tipo int. Tambin se debe tomar
en cuenta que los valores de las constantes estn asignados con el signo = y
estn separadas por comas.
Como habis visto la forma de acceder al valor numrico de las enumeraciones
es especificando entre parentesis a qu tipo pertenecen, en este caso (uint).
Despus de lo cual especificamos el nombre de la enumeracin seguido por un
punto que separa al nombre de la constante. En el caso de que deseemos
desplegar slo el nombre de la constante y no su valor, se debe omitir el
nombre del tipo como: segundos.hora sin (uint) al inicio.
En el caso de que solamente especifiquemos algunos valores de las
constantes, el compilador asignar el siguiente valor a la siguiente constante.
As por ejemplo:
enum nmeros
{
uno, //toma el valor de 0
dos, //toma el valor de 1
diez = 10, //toma el valor de 10
once, //toma el valor de 11
}
Operadores
Los operadores son smbolos con los cuales C# tomar una accin. Por
ejemplo existen operadores matemticos para sumar, restar, multiplicar y dividir
nmeros. Existen tambin operadores de comparacin que analizar si un valor
es igual, mayor o menor que otro y operadores de asignacin los cuales
asignarn nuevos valores a los objetos o variables. A continuacin
explicaremos un poco ms detalladamente los operadores en C#:
Operadores matemticos
Casi todos los lenguajes de programacin soportan operadores matemticos.
Estos operadores se utilizan para realizar operaciones matemticas sencillas
entre nmeros. Entre estos operadores tenemos los de suma, resta,
multiplicacin, divisin y mdulo (o residuo): +,-,*,/,%, y se los usa de la
siguiente manera:
using System;

class operadoresMatematicos
{
public static void Main()
{
int a = 7;
int b = 4;
int c = a + b;
int d = a - b;
int e = a * b;
int f = a / b;
int g = a % b;
Console.WriteLine ("De los nmeros: {0} y {1} la
suma es: {2}, la resta es:{3}, la multiplicacin es: {4}, la
divisin es: {5} con un residuo de: {6}",a,b,c,d,e,f,g);
}
}
Operadores de asignacin
Los operadores de asignacin son aquellos que sirven para asignar el valor del
objeto o variable de la derecha al objeto o variable de la izquierda. Un ejemplo
sencillo de este tipo de operadores es la inicializacin de variables. Como
habamos visto, para asignar el valor a una variable simplemente utilizamos el
smbolo (u operador) igual =
int a = 15; //la variable a tomar el valor de 15.
int b = a = 10; //la variable a y la variable b tomarn el valor de
10.
Adems de estos operadores de asignacin sencillos, existen otros operadores
de asignacin que realizan operaciones matemticas antes de asignar el valor
a la variable u objeto. Entre ellos tenemos: +=, -=, *=, /=, %=, ++, --. Ejemplos:
var += 10; // realiza la operacin var = var+10;
var -= 10; // realiza la operacin var = var-10;
var *= 10; // realiza la operacin var = var*10;
var /= 10; // realiza la operacin var = var/10;
var++; //realiza la operacin var = var+1; despus de procesar esta
lnea
++var; //realiza la operacin var = var+1; antes de procesar esta
lnea
var--; //realiza la operacin var = var-1; despus de procesar esta
lnea
--var; //realiza la operacin var = var-1; antes de procesar esta
lnea
Operadores de comparacin
Estos operadores son muy tiles cuando tenemos que cambiar el flujo de
nuestro programa. Con ellos podemos comparar si un objeto o variable es igual
(==), no es igual (!=), es mayor o igual (>=), es menor o igual (<=), es mayor (>)
o es menor (<) que otro objeto. El resultado de esta comparacin es de tipo
bool es decir verdadero o falso (true o false). Estos operadores se los usa de la
siguiente forma:
int a = 10;
int b = 20;
bool resp;

resp = (a == b); // compara si a es igual a b y retorna el valor
bool false (o falso), tmese en cuenta que a==b es MUY diferente a
a=b
resp = (a != b); // compara si a es diferente a b y retorna el
valor bool true (o verdadero)
resp = (a <= b); // compara si a es menor o igual a b y retorna el
valor bool true (o verdadero)
resp = (a >= b); // compara si a es mayor o igual a b y retorna el
valor bool false (o falso)
resp = (a < b); // compara si a es menor a b y retorna el valor
bool true (o verdadero)
resp = (a > b); // compara si a es mayor a b y retorna el valor
bool false (o falso)
Operadores lgicos
Para entender como funcionan los operadores lgicos tenemos que aprender
un poco lo que son los nmeros binarios. En esta parte del libro no cubriremos
en detalle este extenso tema de los nmeros binarios ni del Algebra que
gobierna estos nmeros ni mucho menos de como se comportan las puertas
lgicas dentro de un ordenador porque nos tomara uno o dos libros completos,
pero nos gustara dar un poco de bases de como es que los nmeros binarios
forman parte de los operadores lgicos. Toda informacin que el ordenador
opera internamente es representada por nmeros binarios (por unos y ceros
que son conocidos tambin por verdadero y falso), as la letra A el ordenador
internamente lo representa en cdigo binaro ASCII como 01000001 que en
nmeros "normales" o decimales es 65. Para manipular esta informacin en
unos y ceros, el ordernador tiene operadores lgicos los cuales permiten
cambiar la informacin de una manera que nos convenga. Por medio de estos
operadores lgicos el ordenador es capaz de tomar decisiones, procesar
cualquier informacin, hacer complicadas operaciones matemticas, o en otras
palabras, por medio de estos operadores lgicos, el ordenador hace todo lo
que vosotros le habis visto hacer.
Los operadores lgicos ms importantes para nuestro estudio en C# son:
AND
Representado por el smbolo &. Comprueba si todos los nmeros binarios son
1 (o verdadero) entonces la respuesta es 1 (o verdadero)
OR
Representado por el smbolo | (barra vertical de la tecla del 1). Comprueba si
cualquiera de los nmeros binarios es 1 (o verdadero) entonces la respuesta es
1 (o verdadero)
NOT
Representado por el smbolo ~ y !. Invierte la respuesta. En operaciones con
tipos bool, el operador ! cambia la variable de verdadero a falso o viceversa,
pero en nmeros binarios, el operador ~ cambia cada uno de los unos y ceros
por su opuesto, cuando encuentra un uno lo cambia por un cero y viceversa,
as por ejemplo si tenemos el nmero binario 01000001 y aplicamos el
operador NOT ~ obtendremos 10111110, pero si tenemos una expresin que
se evalua como true (o verdadera) y si se aplica el operador !, se obtiene una
respuesta false (o falsa). Por ejemplo (!(10==10)) esta expresin tiene como
resultado false
XOR
Representado por el smbolo ^. En dos nmeros, comprueba si los dos
nmeros binarios son iguales, entonces la respuesta es 0 (o falso).
<<
Desplazar a la izquierda desplaza todos los bits hacia la izquierda
introduciendo ceros al final de la derecha y descartando los ltimos nmeros.
As el nmero 01000001 si se lo desplaza a la izquierda una vez 01000001 <<
1, se convierte en 10000010
>>
Al igual que el operador anterior, desplazar a la derecha desplaza todos los bits
hacia la derecha introduciendo ceros al final de la izquierda y descartando los
ltimos nmeros. As el nmero 01000001 si se lo desplaza a la derecha una
vez 01000001 >> 1, se convierte en 00100000
Operadores lgicos de unin
En el caso de que deseemos comparar varios valores para saber si todos son
verdaderos o si alguno es verdadero podemos usar los operadores lgicos de
unin && y ||
a && b // esta lnea compara si a y b son verdaderos retorna el
valor true (o verdadero) si los dos lo son
a || b // esta lnea compara si a o b son verdaderos retorna el
valor true (o verdadero) si alguno de los dos es
!a // esta lnea compara si a es verdadero retorna falso si lo
es y viceversa.
a y b pueden representar variables, constantes, nmeros, funciones,
expresiones, etc. que den como resultado un valor de decisin (true o false).
As por ejemplo, el siguiente ejemplo es vlido:
int a = 0;
int b = 10;
int c = 20;

if ((a <= b) && (c >= b))
System.Console.WriteLine ("a es menor o igual a b y c es mayor o
igual a b");
Captulo 4

Вам также может понравиться