Está en la página 1de 14

Captulo 1

FUNDAMENTOS DE PROGRAMACION
EN .NET CON C#
Que es C#
C# (lase, en ingls C sharp, y en espaol C almohadilla) es un lenguaje de
programacin que permite el desarrollo de aplicaciones para Internet, para mviles y
aplicaciones de propsito general. Inicialmente se desarroll para programar en la
plataforma .NET, pero dadas las caractersticas de esta y la estandarizacin que se ha
hecho de su estructura por parte de las principales entidades de estndares
internacionales, se han desarrollado otras plataformas que cumplen con dicha
estructura y por lo tanto C# puede ser utilizado como lenguaje de programacin en
ellas. Entre estas plataformas se destaca el Proyecto MONO, desarrollado para Linux y
Mac.
El lenguaje C# es orientado a objetos y se ha creado basndose en la estructura de C y
C++, especialmente su sintaxis y potencia, y adoptando el estilo y metodologa de la
programacin en Visual Basic. Sin embargo es importante aclarar que C# no es el
resultado de la evolucin directa de ninguno de estos lenguajes, sino que ha sido
creado desde cero, para programar sobre la plataforma .NET. Es un lenguaje que fue
concebido con el objetivo de programar esta plataforma y por lo tanto se puede decir
que es el lenguaje natural de .NET.
La empresa Microsoft, creadora de C#, en un intento de superar a otras plataformas
que estn imponindose en el soporte a aplicaciones que trabajan en red, especialmente
sobre Internet, decidi estandarizar la plataforma .NET y con ella el lenguaje base de la
misma, C#. Con esta decisin se ha logrado que Microsoft de a conocer las
especificaciones tanto de la plataforma como del lenguaje de programacin, y de esta
manera permitir que terceros desarrollen implementaciones de .NET para el mismo
Windows o para sistemas operativos diferentes.

La plataforma .NET
Para comenzar no entraremos en muchos detalles sobre la plataforma .NET, y evitar de
esta manera confundir al lector poco experimentado, con tecnicismos que cuando se
tenga una mejor familiaridad se pueden abordar con mayor propiedad.
.NET, en esencia es una librera de clases que contienen o encapsulan una gran
cantidad de funciones que trabajan sobre el sistema operativo. La caracterstica
fundamental de este aspecto, es que dichas clases tienen una estructura comn para
todos los lenguajes que trabajen sobre esta plataforma. Esto trae como consecuencia
que una clase que sea programada en C#, podr ser heredada o utilizada en cualquier
lenguaje de la plataforma, como pueden ser Visual Basic .NET o JScript, para
comenzar.
Desde la perspectiva del programador el aspecto ms importante, es que .NET pone a
su disposicin un marco o entorno de trabajo, llamado .NET Framework, el cual le
permite acceder a una infraestructura dotada con lenguajes de programacin como C#,
Visual Basic .NET, C++ y JScript, y con la posibilidad de acceder a infinidad de
servicios tiles para desarrollar cualquier tipo de aplicacin.

CAPITULO 1 PROGRAMACION CON C#

Lo necesario para programar .NET con C#


El objetivo inicial de este curso es conocer los fundamentos bsicos de la
programacin C# para aplicaciones de propsito general en .NET, y no el manejo de
una herramienta especifica de software. Sin embargo, en el transcurso del mismo, y
para hacer ms fcil la tarea de programacin, se recomienda utilizar software asistente
que se encargue de administrar los detalles tcnicos repetitivos y nos permite
concentrarnos en los detalles de nuestro inters.
Para iniciar a programar en C# y .NET, tan solo se necesita el entorno de trabajo,
conocido como .NET Framework, el cual incluye la plataforma de desarrollo y
ejecucin de las aplicaciones .NET. Actualmente est a disposicin del pblico la
versin 3.5 de este entorno, que puede ser descargada gratuitamente desde la pgina
de Microsoft, pero para efectos de este curso se utilizar la versin 2.0, para la cual
existe mayor soporte y documentacin. Sin embargo, se sugiere descargar el kit de
desarrollo de software de Microsoft .NET 2.0, que contiene adems del .NET
Framework una serie de herramientas y archivos de ayuda tiles a la hora de
programar.
Se sugiere que las prcticas iniciales se programen utilizando nicamente un editor de
texto sencillo, como el Bloc de notas, y se realice la compilacin mediante la lnea de
comandos. Esto con el fin de que tengamos la posibilidad de comprender al detalle
aquellos aspectos que un entorno de desarrollo integrado, como el Visual Studio, no
nos permite observar, pero cuya comprensin y familiaridad resultan muy importantes
a la hora de desarrollar aplicaciones que requieren programacin avanzada.
Superada la primera etapa del aprendizaje, y con el objetivo de agilizar el proceso de
programacin, se utilizar un entorno de programacin integrado como el
Sharpdevelop 2.2. Esta herramienta de software es de distribucin gratuita y se puede
descargar
gratuitamente
desde
la
pgina
de
sus
creadores,
http://www.icsharpcode.net/OpenSource/SD.

Figura 1.1: Sharpdevelop es un entorno de programacin para C# dotado de un diseador grfico y un


editor de cdigo.

www.pedrov.phpnet.us

CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIN EN .NET CON C#

Sharpdevelop es un entorno de programacin diseado especialmente para programar


con C#, pero adaptado tambin a Visual Basic .NET. La versin 2.2 trabaja
bsicamente sobre la versin 2.0 del .NET Framework. Su diseo, al menos en lo
bsico, es muy parecido al entorno que ofrece VisualStudio .NET para C#, pero es
open-source y por lo tanto se puede obtener una copia gratuitamente.

La lnea de comandos
Para compilar nuestras aplicaciones a travs de la lnea de comandos, lo primero que se
debe hacer es configurar adecuadamente este entorno. Cualquier aplicacin de .NET
depende para su ejecucin de una serie de libreras propias de la plataforma, las cuales
le suministran la comunicacin necesaria con el sistema operativo. Por lo tanto para
compilar un archivo es necesario poner a disposicin del compilador las direcciones
donde posiblemente pueda encontrar algn componente que requiera o que se est
utilizando en la aplicacin. Para facilitar esta tarea vamos a definir algunas variables de
entorno que facilitan el trabajo de indicar las direcciones bsicas del framework .NET.
Lo primero que se debe crear es una carpeta, donde se guardarn los archivos fuente y
sus correspondientes compilados. Para facilitar la coherencia entre este escrito y las
prcticas que se desarrollen se sugiere crear la carpeta c:\CSCurso.
Para evitar tener que crear manualmente las variables de entorno con las direcciones
necesarias para el compilador, vamos a crear un archivo de procesamiento por lotes,
*.BAT, que realice este trabajo en forma rpida y automtica. Ejecute el Bloc de notas,
copie las lneas siguientes y guarde el archivo en el directorio c:\CSCurso,
nombrndolo como cmdSharp.bat:
@echo off
Echo Lnea de comandos para el compilador de .NET Framework 2.0
Echo.
rem Ejecute este archivo con la instruccin: %comspec% /k cmdSharp.bat
@SET DirFramework=C:\WINDOWS\Microsoft.NET\Framework
@SET VerFramework=v2.0.50727
@set PATH=%DirFramework%\v2.0;%DirFramework%\%VerFramework%;%PATH%
@set LIBPATH=%DirFramework%\v2.0;%DirFramework%\%VerFramework%;%LIBPATH%
cd c:\cscurso

A continuacin abra la ventana Ejecutar (puede hacerse mediante la combinacin de


teclas WINDOWS+R) y ejecute la siguiente instruccin:
%comspec% /k c:\cscurso\cmdsharp.bat

pedrov.cs@hotmail.com

CAPITULO 1 PROGRAMACION CON C#

A continuacin debe cargarse la ventana de lnea de comandos configurada con


las direcciones necesarias para trabajar con los compiladores instalados con el
framework .NET. Se debe repetir este ltimo paso siempre que se desee abrir
una nueva lnea de comandos para compilar un programa desarrollado en C#.
Ejemplo 1: Mi primer programa con C#
El primer programa que vamos a desarrollar es el clsico Hola Mundo!. Este
programa al ejecutarse mostrar en la ventana de comandos el mensaje de texto Hola
mundo C#...! Es un programa muy simple y elemental, adems utiliza un medio de
salida en formato texto, poco usual en los programas modernos, que todo lo hacen a
travs de ventanas. Pero para comenzar est bien, luego nos preocuparemos por ir
mejorando para mostrar mensajes ms sofisticados y a travs de las ya tradicionales
ventanas.
Al igual que sus hermanos, C y C++, el lenguaje C# exige que todo programa
ejecutable (*.EXE) debe incluir un punto de acceso, el cual se debe identificar con la
funcin Main(). Adems como C# es un lenguaje totalmente orientado a objetos,
cualquier funcin que se desee implementar debe estar inmersa dentro de una clase y la
funcin Main() no es la excepcin.
Inicie un nuevo archivo de texto en el Bloc de notas y digite las siguientes lneas de
cdigo C#:
public class PrimerPrograma
{
static void Main()
{
System.Console.WriteLine("Hola mundo C#...!");
}
}

Guarde el archivo en la carpeta de trabajo, CSCurso, y asigne el nombre ejemplo01.cs.


El compilador de C# se identifica como csc.exe (C Sharp Compiler), y tiene una
diversidad de opciones, dependiendo del tipo de compilacin que se desee realizar.
Para este caso, basta con ejecutar el compilador seguido del nombre del archivo fuente
que se desea compilar. Por defecto se genera un archivo ejecutable, *.EXE.
La instruccin de compilacin es la siguiente:
> csc ejemplo01.cs

El siguiente grfico muestra el resultado de la compilacin de ejemplo01.cs y posterior


ejecucin del programa generado.

www.pedrov.phpnet.us

CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIN EN .NET CON C#

Estructura bsica de un programa C#


Como se ha dicho, C# es un lenguaje de programacin orientada a objetos y todo en l
son clases. La clase es el concepto fundamental de esta metodologa de programacin
y es quin identifica a los componentes que constituyen un programa. En un sencillo
programa como el del ejemplo 1, el programador solo escribe una clase, pero en la
prctica existen muchas clases trabajando para permitir que el programa se ejecute.
Todo programa C# est constituido por ms de una clase, aunque el programador tan
solo deba escribir una de ellas.
El ejemplo 1 muestra una estructura bsica de un sencillo programa que se ejecutar en
una consola de comandos, o al menos la parte que debe construir el programador, pero
permite visualizar con detalle los elementos esenciales que soportan a cualquier
aplicacin de software, sin importar el entorno donde vaya a ejecutarse.
public class PrimerPrograma
{
static void Main()
{
// Instrucciones
}
}

La clase es algo as como la estructura o molde de un componente de software, y se


define con la palabra clave class. El trmino public le informa al sistema que dicha
clase y sus componentes estn disponibles para ser vistos desde afuera del componente
de software que la contiene, en este caso el propio programa.
El programa en s, observe, es una clase, pero no se puede perder de vista que en la
prctica el programa necesita otros componentes de software para poder ejecutarse, y
lo ms seguro es que estos ltimos de alguna manera dependan de una o ms clases.
Cuando se ejecuta el programa, el sistema operativo a travs de la plataforma de
ejecucin, .NET, crea una instancia (para comenzar entindase, un componente de
software basado en ese molde) de esta clase e interpreta las ordenes contenidas en ella.
En este caso el nombre que se ha colocado a la clase, PrimerPrograma, es una cadena
de texto tomado arbitrariamente e indiferente a como se lo escriba, lo importante es
tener en cuenta las reglas que la mayora de lenguajes imponen a los nombres de sus
elementos. Como regla general se ha establecido que los nombres de los elementos de
programacin deben iniciar por un carcter alfabtico (letra) o por una raya abajo (_).
Sin embargo, se sugiere no utilizar esta ltima forma de iniciar el nombre de un
elemento, ya que le hace perder esttica al contenido y sobre todo dificulta su lectura
por parte del programador. Adems, aunque no es un requisito, es importante tener en
cuenta las recomendaciones hechas por la documentacin del .NET Framework, sobre
la nomenclatura de los nombres asignados a los diferentes elementos que se utilizan en
el desarrollo de un programa, ya que permiten estandarizar los nombres utilizados en
nuestras aplicaciones y en los componentes que vayamos a agregar al mismo entorno
de desarrollo. As, por ejemplo, para nombrar las clases se sugiere identificadores que
inicien por una letra mayscula, y cuando se requiera utilizar palabras compuestas,
cada palabra debe iniciar por mayscula, tales como: MiPrograma, ProgramaDibujo,
NominaTrabajadoresEmpresa, etc. No es correcto llamar a una clase, como:
5ProgramaDibujo, Programa#dibujo, programa-dibujo.
Adems, un buen programador debe manejar un estilo de escritura de cdigo que haga
clara su interpretacin, no solo por l mismo, sino por otras personas a quienes les
puede interesar revisarlo. Como sugerencia de estilo, la cual manejaremos en este
escrito, se sugiere utilizar identificadores lo ms explicativos posible. Es mejor evitar
el uso de abreviaturas, ya que con el tiempo podemos olvidar su significado y cuando
pedrov.cs@hotmail.com

CAPITULO 1 PROGRAMACION CON C#

el programador deba volver a revisar su cdigo, despus de algunos meses o aos, le


complicar su interpretacin. Talvez, despus de algn tiempo, sea ms fcil
interpretar para que sirva una clase llamada IdentidadTrabajador, que una con el
nombre CITra.
Todo programa desarrollado en C# debe incluir un mtodo1 Main(), el cual le informa
al compilador por donde debe iniciar y tambin terminar un programa. Este mtodo o
funcin siempre se define antecedida de la palabra clave static, la cual permite utilizar
la clase directamente, sin necesidad de instanciar un objeto de ella. Esto debe ser as
por que en el momentos de iniciar la ejecucin de un programa, an no se ha montado
en el sistema todos los componentes necesarias para manejar objetos y por lo tanto el
procesador no sabe que hacer con ellos
La palabra clave void, que antecede a Main, le dice al sistema que la funcin que viene
en seguida no retornar ningn valor y que por lo tanto no espere nada. En C#, esta
funcin tambin se puede definir como int
La funcin Main() puede ir como se mostr en el ejemplo 1, o tambin incluir
argumentos de tipo cadena de texto. Dichos argumentos se identifican por un arreglo o
vector del tipo string (cadena de texto), como en la siguiente forma:
static void Main(string[] argumentos)
{
// Instrucciones
}

En apariencia, los argumentos de inicio de ejecucin solo son vlidos para programas
de consola, y no para programas que manejan un sistema grfico de ventanas, como las
aplicaciones tipo Windows. Pero esto no es muy exacto, los programas tipo Windows,
o en general que manejan ventanas, tambin pueden requerir argumentos de entrada en
el instante en que inician su ejecucin. Un buen ejemplo son los programas que
manejan algn formato de archivo especifico, como puede ser el Bloc de notas que
genera archivos de texto que se identifican con la extensin *.TXT y los cuales,
generalmente, el sistema operativo asocia con este editor. Esto trae como consecuencia
dos formas de iniciar la ejecucin del Bloc de notas: una, a travs de su acceso directo
en el men de Programas, y la otra haciendo doble clic en el archivo de texto. En este
ltimo caso el sistema operativo enva un argumento al programa informndole que su
ejecucin la inicio un archivo y no el acceso directo del men de programas. El
argumento que se enva contiene el nombre completo del archivo que lo llam, y de
esta forma el programa se ejecuta y realiza su apertura.

Ejemplo2: Un programa de bienvenida con argumentos de entrada


El siguiente programa, que se identificar con la clase Bienvenidos, recibe una
cadena de texto como argumento, que bien podra ser el nombre de una persona, y lo
muestra en pantalla haciendo parte de un mensaje de bienvenida.
Escriba este programa en el Bloc de notas y gurdelo con el nombre ejemplo02.cs:
public class Bienvenida
{
static void Main(string[] nombre)
{
System.Console.WriteLine("Bienvenido(a) " + nombre[0]);
}
}
1

Un mtodo es el nombre que se asigna a las funciones y procedimientos que se encuentran haciendo parte de una clase
y que pueden ser utilizadas desde el exterior de la misma.

www.pedrov.phpnet.us

CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIN EN .NET CON C#

Compile el programa con la instruccin,


> csc ejemplo02.cs

En seguida realice la ejecucin del programa llamando a ejemplo02 seguido de un


nombre, como por ejemplo:
> ejemplo02 Homero

Si todo ha salido bien, la salida que muestra el programa despus de teclear ENTER es,
Bienvenido(a) Homero

Pruebe a ejecutar el programa sin enviarle un argumento. Observar que se produce un


error, el cual es informado por la plataforma de ejecucin del .NET.

La consola
Este es el nombre como en Windows, e incluso en otros sistemas operativos, se conoce
a la interfaz que permite enviar rdenes al sistema operativo a travs de comandos
escritos. Tales comandos, no son otra cosa sino programas desarrollados para este
entorno de ejecucin.
Para .NET la consola de Windows se manipula a travs de un objeto que se identifica
con el nombre Console, el cual incluye todas las funciones bsicas para manejar este
elemento del sistema operativo. Una de esas funciones es WriteLine que se encarga de
enviar a la pantalla, o tambin a otros dispositivos de salida, el argumento que se le
asigne, ya sea una cadena de texto o un valor numrico.
En la instruccin que hemos utilizado en el anterior ejemplo,
System.Console.WriteLine("Bienvenido(a) " + nombre[0]);

se observa que el objeto Console esta antecedido por el identificador System. Este en
realidad es lo que se denomina espacio de nombres, que no es ms que el nombre de
un conjunto que agrupa a una serie de clases, que por lo general el programador
considera guardan alguna relacin entre s. En este caso la clase Console pertenece al
conjunto o espacio de nombres llamado System.

Miembro

Color

Black
Blue
Cyan
DarkBlue
DarkCyan
DarkGray
DarkGreen
DarkMagenta
DarkRed
DarkYellow
Gray
Green
Magenta
Red
White
Yellow

Negro
Azul
Aguamarina
Azul marino
Verde azulado
Gris oscuro
Verde oscuro
Fucsia oscuro
Rojo oscuro
Amarillo oscuro
Gris
Verde
Fucsia
Rojo
Blanco
Amarillo

Miembros de la enumeracin
ConsoleColor

Ejemplo 3: Programa de consola para ingresar y mostrar datos


Vamos a desarrollar un programa que lee dos datos a travs de la consola, el nombre y
el documento de identidad, utilizando el mtodo ReadLine de la clase Console. Para
mostrar las etiquetas y los mensajes se utilizarn los mtodos WriteLine y Write. La
diferencia entre estos mtodos es que el primero escribe el mensaje y pasa el cursor a
la siguiente lnea, mientras que Write mantiene el cursor al final de la lnea escrita.
Adicional a lo anterior, y para recrearnos un poco en medio de tanta oscuridad de la
consola, vamos a asignar color al texto. Para esta tarea el objeto Console cuenta con la
propiedad ForegroundColor, que permite asignar un color al texto de la consola. La
plataforma de desarrollo de .NET pone a disposicin del programador un coleccin de
colores, mediante la enumeracin ConsoleColors, para asignarlos tanto al color de
fondo como al texto de la consola.
public class LectorDatos
{
static void Main()
{
System.Console.ForegroundColor = System.ConsoleColor.Green;
pedrov.cs@hotmail.com

CAPITULO 1 PROGRAMACION CON C#

System.Console.Write("Nombre del usuario: ");


System.Console.ReadLine();
System.Console.Write("Nmero de indentificacin: ");
System.Console.ReadLine();
System.Console.WriteLine("Acceso permitido");
System.Console.ResetColor(); // Reestablece las opciones de color
}
}

Inicie un nuevo archivo de texto en el Bloc de notas, incluya las lneas de codigo
sugeridas y gurdelo con el nombre ejemplo03.cs.
En los ejemplos anteriores la compilacin se realiz utilizando la opcin bsica que
ofrece el compilador de C#, llamando al compilador y asignndole el nombre del
archivo fuente que se desea compilar. Por defecto, el compilador asigna al archivo
compilado el mismo nombre del archivo fuente, pero en un momento dado el
programador puede desear asignar un nombre conveniente al archivo ejecutable. Como
cualquiera de los compiladores antecesores a C#, este cuenta con una serie de opciones
que permiten obtener diferentes salidas en el proceso de compilacin. Para este caso en
particular, se puede utilizar el parmetro out, que permite asignar un nombre al archivo
compilado, diferente al de su fuente. Se aplica siguiendo la sintaxis,
csc /out:ArchivoCompilado ArchivoFuente

Teniendo en cuenta lo anterior compile el programa con la instruccin,


> csc /out:LectorDatos.exe ejemplo03.cs

y ejectelo mediante la llamada,


> LectorDatos

En la programacin de este ejemplo nos hemos dado cuenta que las instrucciones
pueden ser un tanto complejas de escribir, dada la necesidad de tener que incluir el
espacio de nombres en las llamadas a las clases y sus mtodos. Si tenemos en cuenta
que la programacin en .NET se hace a base de objetos, cuyas clases hacen parte de
espacios de nombres, y que muchos de estos espacios de nombres a su vez hacen parte
de otros espacios de nombres, el grado de dificultad parece aumentarse
innecesariamente para el programador de C#, a causa de estos mtodos de asignacin
de nombres. Sin embargo, esta forma de identificar las clases y sus objetos tiene una
poderosa razn de ser y, en vez de perjudicar, ms bien es un beneficio para el
programador. En seguida se describe la importancia de esta metodologa de
agrupamiento de clases y la forma como podemos evitar las dificultades que ofrece el
manejo de los espacios de nombres.

Espacios de nombres
System.Console

Espacio de
nombres

Nombre de la
clase

www.pedrov.phpnet.us

Un espacio de nombres es un nombre que identifica a un conjunto de clases y que


ayuda a distinguirlas de otras que pueden llevar el mismo nombre base. Por ejemplo, la
clase Console que hemos utilizado en todos los ejemplos, hace parte del espacio de
nombres System, que agrupa a todas las clases bsicas de la plataforma .NET. Si un
programador necesita definir otra clase con el nombre Console, puede hacerlo sin
ningn problema siempre y cuando la incluya en un espacio de nombres diferente,
como por ejemplo CursoCSharp.Console. Ambas clases pueden ser utilizadas en una
misma aplicacin sin ningn problema, pero para referenciarlas se deber utilizar su

CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIN EN .NET CON C#

nombre compuesto, espacio de nombres y nombre de la clase, tal como System.Console


y CursoCSharp.Console.
Tambin se puede decir que un espacio de nombres es algo as como un directorio que
agrupa a un conjunto de clases, las cuales el programador las agrupa dependiendo de su
criterio. La plataforma .NET posee muchos espacios de nombres, que agrupan a clases
cuya funcionalidad tiene alguna caracterstica que las relaciona a unas con otras. La
siguiente tabla muestra algunos de los espacios de nombres bsicos que se han definido
en .NET, y los archivos DLL que los contienen junto a sus clases (o tambin llamadas
tipos):

Espacio de nombres

Nombre de la DLL

Descripcin

System

MsCorLib.dll

Las clases base de .NET

System.Data

System.Data.dll

Clases especializadas en
manejar bases de datos

System.Diagnostics

MsCorLib.dll

Tipos para ayudara la


depuracin

System.Drawing

System.Drawing.dll

Tipos para crear grficos en


aplicaciones tipo Windows

System.Globalization

MsCorLib.dll

Tipos para generar


aplicaciones con varios
idiomas

System.IO

MsCorLib.dll

Tipos que proporcionan acceso


a los atributos de los archivos

System.Net

System.dll

Tipos para enviar solicitudes


Web HTTP

System.Reflection

MsCorLib.dll

Tipos para el manejo de


ensamblados y otros tipos

System.Resources

MsCorLib.dll

Tipos para trabajar con


archivos de recursos

System.Security

MsCorLib.dll

Tipos para dar soporte a la


seguridad

System.Threading

MsCorLib y System.dll

Tipos para trabajar con


procesamiento mltiple

System.Web

System.Web.dll

Tipos para trabajar con


aplicaciones Web

System.Windows.Forms

System.Windows.Forms.dll

Tipos para crear aplicaciones


con ventanas Windows

System.Xml

System.Xml.dll

Tipos para trabajar con


esquemas XML

Es importante destacar que estos son solo algunos de los espacios de nombres que
existen en .NET. Pero todos los espacios de nombre que conforman la plataforma
.NET se encuentran definidos dentro del espacio de nombres System, y una gran
cantidad de ellos estn ubicados dentro de los anteriores espacios de nombres.
Otro aspecto interesante, es observar la forma como han sido nombrados los archivos
DLL que contienen a estos espacios de nombres, como por ejemplo el espacio de
nombres System.Drawing es guardado en el archivo compilado System.Drawing.dll.
No significa esto que se trate de una regla obligatoria que vaya a tener algn efecto en
el proceso de compilacin, sino ms bien una cuestin de organizacin que facilita
mucho la identificacin del espacio de nombres y sus clases. Por lo general los
entornos de desarrollo integrado, como Sharpdevelop y VisualStudio .NET generan
estos nombres en forma automtica.

pedrov.cs@hotmail.com

10

CAPITULO 1 PROGRAMACION CON C#

El objetivo fundamental de los espacios de nombres, adems de ayudar en la


organizacin, es impedir las incompatibilidades creadas por la posible duplicidad de
nombres asignados a las clases. Es tanta la cantidad de clases que se encuentran
definidas dentro de la plataforma de .NET y las que vaya a utilizar el programador de
aplicaciones, que bien podra entrar en conflicto a la hora de dar un nombre a una
clase, lo cual aunque puede ser detectado por el compilador, de todas maneras puede
perjudicar el diseo y sobre todo la posibilidad de trabajar un proyecto con
componentes de software asignados a diferentes grupos de desarrollo. Adems se corre
el riesgo que los nombres de las clases de un programador coincidan con las de otro, lo
cual creara inconsistencias al sistema.
Supongamos un caso: un equipo de desarrollo encarga a dos grupos diferentes de
programadores el diseo de algunos de los componentes de software para la aplicacin
de software que est desarrollando. Los dos grupos, debido a la dificultad que tienen de
comunicacin, implementan, cada uno de ellos, una clase llamada ColorTexto para
colorear las lneas de texto de la salida, pero con funcionalidades un tanto diferentes.
Por ejemplo, el primer grupo dota a esta clase con la funcionalidad de colorear el texto
con rojo, mientras que el segundo grupo le asigna funcionalidades para colorear con
amarillo y azul. Si el equipo de desarrollo base necesita utilizar los tres colores, est
obligado a utilizar las dos clases por que cuentan con las funcionalidades que se
necesitan y no se puede obviar una de ellas, pero puede verse en un serio problema si
ambas fueron compiladas con el mismo nombre.
La solucin al anterior problema es utilizar los espacios de nombres para identificar
claramente a cada clase y evitar conflicto de nombres. Supongamos que los equipos de
programadores se identifican con los nombres de Alfa y Beta y hacen parte de la
organizacin MiEmpresa, entonces podran utilizar como nombres para sus respectivas
clases,
MiEmpresa.EquipoAlfa.ColorTexto
y
MiEmpresa.EquipoBeta.ColorTexto

Con esto queda perfectamente solucionado el problema de la duplicidad de clases y


permite la utilizacin de ambas clases sin ningn problema.
Para establecer un espacio de nombres se utiliza la palabra clave namespace, que tiene
la siguiente estructura:
namespace Nombre
{
// Definicin de las clases que
// conforman el espacio de nombres
}

Se puede anidar cualquier cantidad de espacios de nombres para permitir alargar la


identidad de las clases. De esta manera la clase de nuestro ejemplo puede definirse, por
parte del Equipo Alfa as:
namespace MiEmpresa
{
namespace EquipoAlfa
{
public class ColorTexto
{
// Instrucciones
}
}
}
www.pedrov.phpnet.us

CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIN EN .NET CON C#

11

y por parte del equipo Beta as:


namespace MiEmpresa
{
namespace EquipoBeta
{
public class ColorTexto
{
// Instrucciones
}
}
}

En el caso antes planteado, la referencia a las clases resulta un tanto compleja ya que se
debe escribir el nombre completo de la clase, incluyendo los identificadores de sus
espacios de nombres. Esto puede complicar el trabajo del programador, al obligarlo a
teclear demasiado cdigo. Para evitar tener que teclear nombres demasiado largos a
causa de los espacios de nombres, C# cuenta con la palabra clave using que permite
direccionar los espacios de nombres en el encabezado del archivo fuente y acortar la
referencia a una clase, ya sea llamndola por su nombre bsico o al menos sin tener
que recurrir a todos los espacios de nombres que la identifican, siempre y cuando no
entre en conflicto con otros nombres.

Ejemplo 4: Ensamblado para colorear texto


En el siguiente ejemplo de programacin vamos llevar a la prctica el trabajo del
equipo Alfa, antes mencionado, para mostrar bsicamente el uso de la palabra clave
using. Pero, adems este ejercicio nos permitir acercarnos a la descripcin terica de
desarrollar una aplicacin por componentes. Vamos a suponer que este equipo debe
compilar y entregar su componente de software en un archivo DLL, que en el mundo
.NET se conoce como ensamblado.
Inicie un nuevo archivo, en el Bloc de notas, y escriba el siguiente cdigo:
// Archivo: EquipoAlfa.ColorTexto.cs
using System;
namespace EquipoAlfa
{
public static class ColorTexto
{
public static void Rojo(string cadena)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(cadena);
Console.ResetColor();
}
}
}

Observe que, se ha utilizado la instruccin


using System;

para direccionar al espacio de nombres System. De esta manera se le informa al


compilador donde debe buscar la definicin de la clase Console.
pedrov.cs@hotmail.com

12

CAPITULO 1 PROGRAMACION CON C#

Aunque la programacin orientada a objetos establece que las clases son plantillas, o
moldes, que describen en forma general como es un objeto, hasta el momento no la
hemos utilizado en este contexto, que en la prctica es su verdadera y ms importante
finalidad, sino a travs del uso directo de las clases y sus mtodos. C# le permite al
programador, en cierta manera, evadir el concepto de programacin orientada a objetos
definiendo clases estticas. Este tipo de clases se comportan como plantillas que
nicamente sirven para agrupar funciones, como aquellas que se utilizan en cualquier
lenguaje de programacin estructurada y que le sirven al programador para realizar
alguna tarea concreta. Este tipo de clases se definen con la palabra clave static. Todos
los mtodos o funciones de una clase esttica deben definirse tambin como static.
Adems, estas clases se utilizan directamente ya que no permiten definir objetos a
partir de ellas.
Siguiendo el esquema de nombres sugerido anteriormente, guarde el archivo anterior
con el nombre EquipoAlfa.ColorTexto.cs y complelo utilizando el parmetro
/target:library, como lo muestra la siguiente instruccin tecleada en la lnea de
comandos:
> csc /t:library EquipoAlfa.ColorTexto.cs

Si todo sale bien, al revisar la carpeta de trabajo se observa que se ha compilado en el


ensamblado EquipoAlfa.ColorTexto.dll.La siguiente parte del ejemplo consiste en
utilizar esta librera y su clase en un programa ejecutable.
El programa que se va a desarrollar le pide al usuario ingresar un mensaje desde el
teclado y lo escribe a continuacin en color rojo.
Inicie un nuevo archivo en el Bloc de notas y teclee el siguiente cdigo:
// Archivo: Ejemplo04.cs
using System;
using EquipoAlfa;
public class MensajeDeColor
{
static void Main()
{
string sMensaje;
Console.Write("Escriba su mensaje: ");
sMensaje = Console.ReadLine();
ColorTexto.Rojo(sMensaje);
Console.WriteLine("Terminado...");
}
}

Para cambiar a color rojo el mensaje ingresado por el usuario, el programa utiliza la
clase ColorTexto definida en el ensamblado EquipoAlfa.ColorTexto.dll. En el proceso
de compilacin de este programa, el compilador debe establecer donde se encuentra la
clase y fijar est informacin en el archivo ejecutable que se va a generar. Para ello es
necesario indicarle al compilador de C# el nombre del recurso con el cual debe realizar
el enlace, mediante la opcin /resources seguido del nombre del archivo DLL, que
en forma simplificada se escribe como /r.
En consecuencia la compilacin se debe realizar mediante la siguiente instruccin:
>csc /r:EquipoAlfa.ColorTexto.dll ejemplo04.cs

www.pedrov.phpnet.us

CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIN EN .NET CON C#

13

Ejecute el programa en la lnea de comandos y observe sus resultados.


En definitiva hemos desarrollado una aplicacin que consta de dos ensamblados, al
menos desde la perspectiva del programador: un archivo ejecutable obtenido en la
ltima compilacin y un archivo DLL que contiene a la clase que se encarga de ponerle
color al texto. Esta estructura es la que utilizan la mayora de aplicaciones modernas,
donde cada componente se compila en un archivo independiente, en el caso de .NET
en un ensamblado, lo cual trae una ventaja principal, es que permite hacer cambios a la
aplicacin sin necesidad de tener que volver a compilar todo, sino nicamente el
componente que sea necesario.

Ejemplo 5: Clculo de las funciones trigonomtricas


El siguiente ejemplo solicita un valor numrico correspondiente a un ngulo y calcula
el valor de las tres principales funciones trigonomtricas. El valor de cada funcin es
mostrado en un color diferente.
Para asignar color al texto de salida, reutilizaremos el ensamblado
EquipoAlfa.ColorTexto.dll, creado en el ejemplo anterior y que escribe un texto en
color rojo, y crearemos el componente que permite trabajar con dos colores ms,
creado por el equipo Beta. Como se estableci en la descripcin terica, este
ensamblado debe pertenecer al espacio de nombres EquipoBeta y realizar el trabajo a
travs de una clase esttica llamada ColorTexto. Al final, el programa ejecutable
utilizar, para realizar su trabajo, dos ensamblados: EquipoAlfa.ColorTexto.dll y
EquipoBeta.ColorTexto.dll.
// Archivo: EquipoBeta.ColorTexto.cs
using System;
namespace EquipoBeta
{
public static class ColorTexto
{
public static void Amarillo(string cadena)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(cadena);
Console.ResetColor();
}
public static void Azul(string cadena)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(cadena);
Console.ResetColor();
}
}
}

Guarde el archivo con el nombre EquipoBeta.ColorTexto.cs y complelo con la


instruccin de lnea de comandos,
> csc /t:library EquipoBeta.ColorTexto.cs

Con esto ya tenemos los ensamblados entregados por los equipos Alfa y Beta y los
vamos a utilizar en nuestro proyecto de software. El cdigo del programa que nos
permite calcular las funciones trigonomtricas es el siguiente:
pedrov.cs@hotmail.com

14

CAPITULO 1 PROGRAMACION CON C#

// Archivo: Ejemplo05.cs
using System;
public class Trigonometria
{
static void Main()
{
double angulo = 0;
Console.Clear();
Console.Title = "Funciones trigonomtricas";
Console.Write("Valor del ngulo en grados = ");
angulo = Convert.ToDouble(Console.ReadLine());
angulo = angulo * Math.PI / 180; // Convierte de grados a radianes
EquipoBeta.ColorTexto.Amarillo("\nSeno = " + Math.Sin(angulo));
EquipoBeta.ColorTexto.Azul("Coseno = " + Math.Cos(angulo));
EquipoAlfa.ColorTexto.Rojo("Tangente = " + Math.Tan(angulo));
Console.ReadLine(); // Detiene la ejecucin hasta presionar ENTER
}
}

Este programa, para empezar limpia e inicializa la pantalla mediante el mtodo clear
de la clase Console y asigna un ttulo a la barra de ttulos de la consola, mediante la
propiedad Title.
La lectura de datos se realiza mediante el mtodo ReadLine. Pero este mtodo captura
el dato como una cadena de texto de tipo string, lo cual implica que para poderse
manipular como un valor numrico se debe convertir primero a nmero. En este caso
se utiliza la Clase esttica Convert y su mtodo ToDouble, que lo convierte de cadena
a un valor de tipo double (numero real de precisin doble).
Tambin, es necesario realizar una conversin del dato ingresado, pasndolo de grados
a radianes, ya que este es el formato que utilizan las funciones trigonomtricas de
.NET. Tanto el valor de la constante PI como las funciones trigonomtricas, y otras
funciones matemticas, se encuentran definidas e implementadas en al clase esttica
Math.
Finalmente, hay que compilar este archivo fuente, para generar el ensamblado de
nuestro programa, teniendo en cuenta que este depende de dos ensamblados ms,
EquipoAlfa.ColorTexto.dll y EquipoBeta.ColorTexto.dll. En el llamado al compilador
se debe pasar el listado de las libreras que se necesitan para la compilacin, utilizando
la opcin /r: seguida de los nombres de los archivos DLL, separados por comas (pero
sin espacios).
Debe tenerse en cuenta que para llamar a la clase ColorTexto, fue necesario incluir el
espacio de nombres al cual perteneca, dado que si no se hacia as se creara una
ambigedad que no permitira al sistema saber de cual clase se est hablando.
La compilacin se realiza ejecutando la siguiente instruccin en la lnea de comandos:
> csc /r:EquipoAlfa.ColorTexto.dll,EquipoBeta.ColorTexto.dll ejercicio05.cs

Con este sencillo ejemplo se ha mostrado la forma como se puede organizar una
aplicacin de software y la reutilizacin de algunos de sus componentes para ahorrar
trabajo y ganar tiempo en el proceso de desarrollo. Cuando abordemos el concepto de
programacin orientada a objetos, propiamente dicho, se dar mayor nfasis a este tipo
de diseo.

www.pedrov.phpnet.us

También podría gustarte