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 más organizados y facilita su localización. De hecho, así es como se halla organizada la BCL, de modo que todas las clases más comúnmente usadas en cualquier aplicación se hallan en el espacio de nombres llamado System, las de acceso a bases de datos en System.Data, las de realización de operaciones de entrada/salida en System.IO, etc.

    Por otro lado, los espacios de nombres también 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 dándoles el nombre de la empresa fabricante, o su nombre de dominio en Internet, etc.

Definición de espacios de nombres

    Para definir un espacio de nombres se utiliza la siguiente sintaxis:


namespace <nombreEspacio>
{
 <tipos>
}

    Los así definidos pasarán a considerase miembros del espacio de nombres llamado . Como veremos más adelante, aparte de clases estos tipos pueden ser también interfaces, estructuras, tipos enumerados y delegados. A continuación 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 concatenación de todos los espacios de nombres a los que pertenece ordenados del más externo al más interno y seguido cada uno de ellos por un punto (carácter .) Por ejemplo, el verdadero nombre de la clase ClaseEjemplo antes definida es EspacioEjemplo.ClaseEjemplo. Si no definimos una clase dentro de una definición 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 definición (nombre simple)

    Aparte de definiciones de tipo, también 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 calificación 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.

Espacios de nombres
José Antonio González Seco

José Antonio es experto en tecnologias Microsoft. Imparte cursos y conferencias en congresos sobre C# y .NET en Universidades de toda España (Sevilla, Barcelona, San Sebastián, Valencia, Oviedo, etc.) en representación de grandes empresas como Microsoft.
Fecha de alta:05/10/2006
Última actualizacion:05/10/2006
Visitas totales:24298
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com