Programación Con C# y
Programación Con C# y
FUNDAMENTOS DE PROGRAMACION
EN .NET CON C#
Que es C#
C# (léase, en inglés C sharp, y en español C almohadilla) es un lenguaje de
programación que permite el desarrollo de aplicaciones para Internet, para móviles y
aplicaciones de propósito general. Inicialmente se desarrolló para programar en la
plataforma .NET, pero dadas las características de esta y la estandarización que se ha
hecho de su estructura por parte de las principales entidades de estándares
internacionales, se han desarrollado otras plataformas que cumplen con dicha
estructura y por lo tanto C# puede ser utilizado como lenguaje de programación 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 basándose en la estructura de C y
C++, especialmente su sintaxis y potencia, y adoptando el estilo y metodología de la
programación en Visual Basic. Sin embargo es importante aclarar que C# no es el
resultado de la evolución 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 están imponiéndose 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 decisión se ha logrado que Microsoft de a conocer las
especificaciones tanto de la plataforma como del lenguaje de programación, 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 librería de clases que contienen o encapsulan una gran
cantidad de funciones que trabajan sobre el sistema operativo. La característica
fundamental de este aspecto, es que dichas clases tienen una estructura común 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 más importante, es que .NET pone a
su disposición un marco o entorno de trabajo, llamado .NET Framework, el cual le
permite acceder a una infraestructura dotada con lenguajes de programación como C#,
Visual Basic .NET, C++ y JScript, y con la posibilidad de acceder a infinidad de
servicios útiles para desarrollar cualquier tipo de aplicación.
2 CAPITULO 1 PROGRAMACION CON C#
www.pedrov.phpnet.us
CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIÓN EN .NET CON C# 3
Sharpdevelop es un entorno de programación diseñado especialmente para programar
con C#, pero adaptado también a Visual Basic .NET. La versión 2.2 trabaja
básicamente sobre la versión 2.0 del .NET Framework. Su diseño, al menos en lo
básico, 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 línea de comandos
Para compilar nuestras aplicaciones a través de la línea de comandos, lo primero que se
debe hacer es configurar adecuadamente este entorno. Cualquier aplicación de .NET
depende para su ejecución de una serie de librerías propias de la plataforma, las cuales
le suministran la comunicación necesaria con el sistema operativo. Por lo tanto para
compilar un archivo es necesario poner a disposición del compilador las direcciones
donde posiblemente pueda encontrar algún componente que requiera o que se esté
utilizando en la aplicación. Para facilitar esta tarea vamos a definir algunas variables de
entorno que facilitan el trabajo de indicar las direcciones básicas del framework .NET.
Lo primero que se debe crear es una carpeta, donde se guardarán los archivos fuente y
sus correspondientes compilados. Para facilitar la coherencia entre este escrito y las
prácticas 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 rápida y automática. Ejecute el Bloc de notas,
copie las líneas siguientes y guarde el archivo en el directorio c:\CSCurso,
nombrándolo como cmdSharp.bat:
@echo off
Echo Línea de comandos para el compilador de .NET Framework 2.0
Echo.
@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
%comspec% /k c:\cscurso\cmdsharp.bat
[email protected]
4 CAPITULO 1 PROGRAMACION CON C#
www.pedrov.phpnet.us
CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIÓN EN .NET CON C# 5
En apariencia, los argumentos de inicio de ejecución solo son válidos para programas
de consola, y no para programas que manejan un sistema gráfico de ventanas, como las
aplicaciones tipo Windows. Pero esto no es muy exacto, los programas tipo Windows,
o en general que manejan ventanas, también pueden requerir argumentos de entrada en
el instante en que inician su ejecución. Un buen ejemplo son los programas que
manejan algún formato de archivo especifico, como puede ser el Bloc de notas que
genera archivos de texto que se identifican con la extensión *.TXT y los cuales,
generalmente, el sistema operativo asocia con este editor. Esto trae como consecuencia
dos formas de iniciar la ejecución del Bloc de notas: una, a través 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 envía un argumento al programa informándole que su
ejecución la inicio un archivo y no el acceso directo del menú de programas. El
argumento que se envía contiene el nombre completo del archivo que lo llamó, y de
esta forma el programa se ejecuta y realiza su apertura.
1
Un método 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 PROGRAMACIÓN EN .NET CON C# 7
La consola
Miembro Color
Este es el nombre como en Windows, e incluso en otros sistemas operativos, se conoce
Black Negro
a la interfaz que permite enviar órdenes al sistema operativo a través de comandos Blue Azul
escritos. Tales comandos, no son otra cosa sino programas desarrollados para este Cyan Aguamarina
entorno de ejecución. DarkBlue Azul marino
DarkCyan Verde azulado
Para .NET la consola de Windows se manipula a través de un objeto que se identifica DarkGray Gris oscuro
con el nombre Console, el cual incluye todas las funciones básicas para manejar este DarkGreen Verde oscuro
DarkMagenta Fucsia oscuro
elemento del sistema operativo. Una de esas funciones es WriteLine que se encarga de DarkRed Rojo oscuro
enviar a la pantalla, o también a otros dispositivos de salida, el argumento que se le DarkYellow Amarillo oscuro
asigne, ya sea una cadena de texto o un valor numérico. Gray Gris
Green Verde
En la instrucción que hemos utilizado en el anterior ejemplo, Magenta Fucsia
Red Rojo
System.Console.WriteLine("Bienvenido(a) " + nombre[0]); White Blanco
Yellow Amarillo
se observa que el objeto Console esta antecedido por el identificador System. Este en Miembros de la enumeración
ConsoleColor
realidad es lo que se denomina espacio de nombres, que no es más que el nombre de
un conjunto que agrupa a una serie de clases, que por lo general el programador
considera guardan alguna relación entre sí. En este caso la clase Console pertenece al
conjunto o espacio de nombres llamado System.
Vamos a desarrollar un programa que lee dos datos a través de la consola, el nombre y
el documento de identidad, utilizando el método ReadLine de la clase Console. Para
mostrar las etiquetas y los mensajes se utilizarán los métodos WriteLine y Write. La
diferencia entre estos métodos es que el primero escribe el mensaje y pasa el cursor a
la siguiente línea, mientras que Write mantiene el cursor al final de la línea 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 disposición del programador un colección de
colores, mediante la enumeración 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;
[email protected]
8 CAPITULO 1 PROGRAMACION CON C#
Inicie un nuevo archivo de texto en el Bloc de notas, incluya las líneas de codigo
sugeridas y guárdelo con el nombre ejemplo03.cs.
En los ejemplos anteriores la compilación se realizó utilizando la opción básica que
ofrece el compilador de C#, llamando al compilador y asignándole 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 compilación. Para este caso en
particular, se puede utilizar el parámetro out, que permite asignar un nombre al archivo
compilado, diferente al de su fuente. Se aplica siguiendo la sintaxis,
> LectorDatos
En la programación 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 métodos. Si tenemos en cuenta
que la programación 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 métodos de asignación
de nombres. Sin embargo, esta forma de identificar las clases y sus objetos tiene una
poderosa razón de ser y, en vez de perjudicar, más bien es un beneficio para el
programador. En seguida se describe la importancia de esta metodología 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 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 básicas de la plataforma .NET. Si un
Espacio de Nombre de la programador necesita definir otra clase con el nombre Console, puede hacerlo sin
nombres clase
ningún 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 aplicación sin ningún problema, pero para referenciarlas se deberá utilizar su
www.pedrov.phpnet.us
CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIÓN EN .NET CON C# 9
nombre compuesto, espacio de nombres y nombre de la clase, tal como System.Console
y CursoCSharp.Console.
También 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 característica que las relaciona a unas con otras. La
siguiente tabla muestra algunos de los espacios de nombres básicos que se han definido
en .NET, y los archivos DLL que los contienen junto a sus clases (o también llamadas
tipos):
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 están 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 algún efecto en
el proceso de compilación, sino más bien una cuestión de organización que facilita
mucho la identificación 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 automática.
[email protected]
10 CAPITULO 1 PROGRAMACION CON C#
www.pedrov.phpnet.us
CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIÓN 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 código. 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 llamándola por su nombre básico 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.
// 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();
}
}
}
using System;
[email protected]
12 CAPITULO 1 PROGRAMACION CON C#
Aunque la programación 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 práctica es su verdadera y más importante
finalidad, sino a través del uso directo de las clases y sus métodos. C# le permite al
programador, en cierta manera, evadir el concepto de programación orientada a objetos
definiendo clases estáticas. Este tipo de clases se comportan como plantillas que
únicamente sirven para agrupar funciones, como aquellas que se utilizan en cualquier
lenguaje de programación 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 métodos o funciones de una clase estática deben definirse también como static.
Además, 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 compílelo utilizando el parámetro
/target:library, como lo muestra la siguiente instrucción tecleada en la línea de
comandos:
// Archivo: Ejemplo04.cs
using System;
using EquipoAlfa;
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 compilación de este programa, el compilador debe establecer donde se encuentra la
clase y fijar está información 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 opción /resources seguido del nombre del archivo DLL, que
en forma simplificada se escribe como /r.
En consecuencia la compilación se debe realizar mediante la siguiente instrucción:
www.pedrov.phpnet.us
CAPITULO 1:
1 FUNDAMENTOS DE PROGRAMACIÓN EN .NET CON C# 13
Ejecute el programa en la línea de comandos y observe sus resultados.
// 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();
}
Con esto ya tenemos los ensamblados entregados por los equipos Alfa y Beta y los
vamos a utilizar en nuestro proyecto de software. El código del programa que nos
permite calcular las funciones trigonométricas es el siguiente:
[email protected]
14 CAPITULO 1 PROGRAMACION CON C#
// Archivo: Ejemplo05.cs
using System;
Este programa, para empezar limpia e inicializa la pantalla mediante el método clear
de la clase Console y asigna un título a la barra de títulos de la consola, mediante la
propiedad Title.
La lectura de datos se realiza mediante el método ReadLine. Pero este método captura
el dato como una cadena de texto de tipo string, lo cual implica que para poderse
manipular como un valor numérico se debe convertir primero a número. En este caso
se utiliza la Clase estática Convert y su método ToDouble, que lo convierte de cadena
a un valor de tipo double (numero real de precisión doble).
También, es necesario realizar una conversión del dato ingresado, pasándolo de grados
a radianes, ya que este es el formato que utilizan las funciones trigonométricas de
.NET. Tanto el valor de la constante PI como las funciones trigonométricas, y otras
funciones matemáticas, se encuentran definidas e implementadas en al clase estática
Math.
Finalmente, hay que compilar este archivo fuente, para generar el ensamblado de
nuestro programa, teniendo en cuenta que este depende de dos ensamblados más,
EquipoAlfa.ColorTexto.dll y EquipoBeta.ColorTexto.dll. En el llamado al compilador
se debe pasar el listado de las librerías que se necesitan para la compilación, utilizando
la opción /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 pertenecía, dado que si no se hacia así se crearía una
ambigüedad que no permitiría al sistema saber de cual clase se está hablando.
La compilación se realiza ejecutando la siguiente instrucción en la línea de comandos:
Con este sencillo ejemplo se ha mostrado la forma como se puede organizar una
aplicación de software y la reutilización de algunos de sus componentes para ahorrar
trabajo y ganar tiempo en el proceso de desarrollo. Cuando abordemos el concepto de
programación orientada a objetos, propiamente dicho, se dará mayor énfasis a este tipo
de diseño.
www.pedrov.phpnet.us