Está en la página 1de 8

Los espacios de nombres se utilizan en gran medida en los programas de C# de dos

maneras. Primero, las clases de .NET Framework utilizan los espacios de nombres para organizar sus
diversas clases. Segundo, declarar sus propios espacios de nombres permite ayudar a controlar el
mbito de la clase y los nombres de mtodo en proyectos de programacin de mayor tamao.



Espacios de nombres en C#.
01/02/2011 DEJA UN COMENTARIO
Los espacios de nombres son un recurso que utilizan algunos lenguajes para la organizacin de un gran
conjunto de tipos de datos. As como los directorios( o carpetas) permiten organizar archivos de modo que
varios ficheros del mismo nombre con vivan en directorios distintos, los espacios de nombre realizan una tarea
similar, pero de manera lgica, para tipos de datos extendidos como clases y estructuras.
Veamos cuales son los espacios de nombre ms populares que posee la librera BCL.
Espacios de nombre Descripcin
System Clase base de toda la librera
System.Collections Clases e Interfaces que definen colecciones de objetos como:
Listas, colas y diccionarios.
System.Data Acceso a datos multiproveedor.
System.Drawing Provee acceso a funcionalidades graficas GDI.
System.IO Manejo de entrada y salida a archivos y flujos.
System.Net Manejo de comunicacin va red por medio de una gran variedad de
protocolos.
System.Reflection Provee acceso a informacin de clases cargadas, por lo que e
pueden crear e invocar tipos de modo dinmico.
System.Text Ofrece recursos para la manipulacin de texto en distintas
codificaciones.
System.Threading Provee recursos para la programacin de aplicaciones multihilo.
System.Security Provee acceso a funcionalidades de encriptacin y configuracin de
seguridad CLR.
System.Windows.Forms Manejo de ventanas y controles grficos.
System.Xml Manejo de datos en formato XML.
Por supuesto que la lista es aun mas grande. Un acceso de referencia ideal es la documentacin que provee
Visual Studio o la provista por MSDN (MSDN Library).





















9.1. Espacios de nombres
Desde nuestros primeros programas hemos estado usando cosas como
"System.Console" o bien "using System". Esa palabra "System" indica que las
funciones que estamos usando pertenecen a la estructura bsica de C# y de la
plataforma .Net.
La idea detrs de ese "using" es que puede ocurrir que distintos programadores en
distintos puntos del mundo creen funciones o clases que se llamen igual, y, si se
mezclan fuentes de distintas procedencias, esto podra dar lugar a programas que
no compilaran correctamente, o, peor an, que compilaran pero no funcionaran de
la forma esperada.
Por eso, se recomienda usar "espacios de nombres", que permitan distinguir unos
de otros. Por ejemplo, si yo quisiera crear mi propia clase "Console" para el
acceso a la consola, o mi propia clase "Random" para manejo de nmeros
aleatorios, lo razonable es crear un nuevo espacio de nombres.
De hecho, con entornos como SharpDevelop o Visual Studio, cuando creamos un
nuevo proyecto, el fuente "casi vaco" que se nos propone contendr un espacio
de nombres que se llamar igual que el proyecto. Esta es apariencia del fuente si
usamos VisualStudio 2008:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}
Y esta es apariencia del fuente si usamos SharpDevelop 3:
using System;

namespace PruebaDeNamespaces
{
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");

// TODO: Implement Functionality Here

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Vamos a un ejemplo algo ms avanzado, que contenga un espacio de nombres,
que cree una nueva clase Console y que utilice las dos (la nuestra y la original, de
System):
/*---------------------------*/
/* Ejemplo en C# */
/* namespaces.cs */
/* */
/* Ejemplo de espacios de */
/* nombres */
/* */
/* Introduccion a C#, */
/* Nacho Cabanes */
/*---------------------------*/

using System;

namespace ConsolaDeNacho {
public class Console
{
public static void WriteLine(string texto)
{
System.Console.ForegroundColor = ConsoleColor.Blue;
System.Console.WriteLine("Mensaje: "+texto);
}
}
}

public class PruebaDeNamespaces
{

public static void Main()
{
System.Console.WriteLine("Hola");
ConsolaDeNacho.Console.WriteLine("Hola otra vez");
}
}

Como se puede ver, este ejemplo tiene dos clases Console, y ambas tienen un
mtodo WriteLine. Una es la original de C#, que invocaramos con
"System.Console". Otra es la que hemos creado para el ejemplo, que escribe un
texto modifica y en color (ayudndose de System.Console), y que llamaramos
mediante "ConsolaDeNacho.Console". El resultado es que podemos tener dos
clases Console accesibles desde el mismo programa, sin que existan conflictos
entre ellas. El resultado del programa sera:

Hola
Mensaje: Hola otra vez


























Espacios de nombres
Concepto de espacio de nombres
Del mismo modo que los ficheros se organizan en directorios, los tipos de
datos se organizan en espacio de nombres.
Por un lado, esto permite tenerlos ms organizados y facilita su localizacin.
De hecho, as es como se halla organizada la BCL, de modo que todas las clases
ms comnmente usadas en cualquier aplicacin se hallan en el espacio de
nombres llamado System, las de acceso a bases de datos en System.Data, las de
realizacin de operaciones de entrada/salida en System.IO, etc.
Por otro lado, los espacios de nombres tambin permiten poder usar en un
mismo programa varias clases con igual nombre si pertenecen a espacios
diferentes. La idea es que cada fabricante defina sus tipos dentro de un espacio de
nombres propio para que as no haya conflictos si varios fabricantes definen
clases con el mismo nombre y se quieren usar a la vez en un mismo programa.
Obviamente para que esto funcione no han de coincidir los nombres los espacios
de cada fabricante, y una forma de conseguirlo es dndoles el nombre de la
empresa fabricante, o su nombre de dominio en Internet, etc.
Definicin de espacios de nombres
Para definir un espacio de nombres se utiliza la siguiente sintaxis:

namespace <nombreEspacio>
{
<tipos>
}
Los as definidos pasarn a considerase miembros del espacio de nombres
llamado . Como veremos ms adelante, aparte de clases estos tipos pueden ser
tambin interfaces, estructuras, tipos enumerados y delegados. A continuacin
se muestra un ejemplo en el que definimos una clase de nombre ClaseEjemplo
perteneciente a un espacio de nombres llamado EspacioEjemplo:

namespace EspacioEjemplo
{
class ClaseEjemplo
{}
}
El verdadero nombre de una clase, al que se denomina nombre
completamente calificado, es el nombre que le demos al declararla prefijado
por la concatenacin de todos los espacios de nombres a los que pertenece
ordenados del ms externo al ms interno y seguido cada uno de ellos por un
punto (carcter .) Por ejemplo, el verdadero nombre de la clase ClaseEjemplo
antes definida es EspacioEjemplo.ClaseEjemplo. Si no definimos una clase
dentro de una definicin de espacio de nombres -como se ha hecho en los
ejemplos de temas previos- se considera que sta pertenece al llamado espacio
de nombres global y su nombre completamente calificado coincidir con el
identificador que tras la palabra reservada class le demos en su definicin
(nombre simple)
Aparte de definiciones de tipo, tambin es posible incluir como miembros de
un espacio de nombres a otros espacios de nombres. Es decir, como se muestra el
siguiente ejemplo es posible anidar espacios de nombres:

namespace EspacioEjemplo
{
namespace EspacioEjemplo2
{
class ClaseEjemplo
{}
}
}
Ahora ClaseEjemplo tendr EspacioEjemplo.EspacioEjemplo2.ClaseEjemplo
como nombre completamente calificado. En realidad es posible compactar las
definiciones de espacios de nombres anidados usando esta sintaxis de calificacin
completa para dar el nombre del espacio de nombres a definir. Es decir, el ltimo
ejemplo es equivalente a:

namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo
{}
}
En ambos casos lo que se ha definido es una clase ClaseEjemplo perteneciente
al espacio de nombres EspacioEjemplo2 que, a su vez, pertenece al espacio
EspacioEjemplo.