¿Qué son los espacios de nombres en VB.NET y cómo utilizarlos?

La forma más común en que la mayoría de los programadores utilizan los namespaces de VB.NET es indicar al compilador qué bibliotecas de .NET Framework se necesitan para un programa en particular. Al elegir una "plantilla" para su proyecto (como "Windows Forms Application") una de las cosas que está eligiendo es el conjunto específico de espacios de nombres que se referenciarán automáticamente en su proyecto. Esto hace que el código en esos espacios de nombres esté disponible para su programa.

Por ejemplo, a continuación, se muestran algunos de los namespaces y los archivos en los que se encuentran para una aplicación de formularios de Windows:

System --> in System.dll

System.Data --> in System.Data.dll

System.Deployment --> System.Deployment.dll

System.Drawing --> System.Drawing.dll

System.Windows.Forms --> System.Windows.Forms.dll

Puede ver (y cambiar) los espacios de nombre y las referencias de su proyecto en las propiedades del proyecto en la pestaña Referencias. He escrito anteriormente sobre este lado de namespaces en el artículo, Referencias y Namespaces en VB.NET.

Esta forma de pensar en los namespaces hace que parezcan ser lo mismo que la "biblioteca de códigos", pero eso es sólo una parte de la idea. El verdadero beneficio de namespaces es la organización.

La mayoría de nosotros no tendremos la oportunidad de establecer una nueva jerarquía de espacios de nombres porque generalmente sólo se hace una vez `al principio' para una biblioteca de códigos grande y complicada. Pero aquí aprenderá a interpretar los espacios de nombres que se le pedirá que utilice en muchas organizaciones.

Qué hacen los Namespaces

Los namespaces permiten organizar las decenas de miles de objetos de .NET Framework y todos los objetos que los programadores de VB crean en los proyectos, también, para que no choquen.

Por ejemplo, si busca un objeto Color en .NET, encontrará dos. Hay un objeto Color en ambos:

System.Drawing

System.Windows.Media

Si añade una sentencia Imports para ambos namespaces (también puede ser necesaria una referencia en las propiedades del proyecto)....

Imports System.Drawing

Imports System.Windows.Media

... entonces una declaración como...

Dim a As Color

... se marcará como un error con la nota "Color is ambiguous" y.NET señalará que ambos namespaces contienen un objeto con ese nombre. Este tipo de error se llama "colisión de nombres".

Esta es la verdadera razón de los "namespaces" y es también la forma en que se utilizan los namespaces en otras tecnologías (como XML). Los espacios de nombres permiten utilizar el mismo nombre de objeto, como Color, cuando el nombre encaja y aún así mantener las cosas organizadas. Puedes definir un objeto Color en tu propio código y mantenerlo distinto de los de.NET (o del código de otros programadores).

Namespace MyColor

   Public Class Color

      Sub Color()

         ' Do something

      End Sub

   End Class

End Namespace

También puede utilizar el objeto Color en otro lugar de su programa de esta manera:

Dim c As New MyColor.Color

c.Color()

Antes de entrar en algunas de las otras características, tenga en cuenta que cada proyecto está contenido en un espacio de nombres. VB.NET utiliza el nombre de su proyecto (WindowsApplication1 para una aplicación de formularios estándar si no la cambia) como espacio de nombres predeterminado.

 

Para ver esto, cree un nuevo proyecto (usé el nombre NSProj y revisé la herramienta Object Browser:

--------

Haga clic aquí para ver la ilustración

Haga clic en el botón Atrás de su navegador para volver

--------

El navegador de objetos muestra su nuevo espacio de nombres de proyecto (y los objetos definidos automáticamente en él) junto con los espacios de nombres de .NET Framework. Esta capacidad de VB.NET para hacer que sus objetos sean iguales a los objetos.NET es una de las claves de la potencia y la flexibilidad. Por ejemplo, esta es la razón por la que Intellisense mostrará sus propios objetos tan pronto como los defina.

Para darle un nuevo impulso, definamos un nuevo proyecto (nombré mi proyecto NewNSProj en la misma solución (use Archivo > Agregar > Nuevo proyecto...) y codifiquemos un nuevo espacio de nombres en ese proyecto. Y para hacerlo más divertido, pongamos el nuevo espacio de nombres en un nuevo módulo (lo llamé NewNSMod).

Y como un objeto debe ser codificado como clase, también agregué un bloque de clase (llamado NewNSObj). Aquí está el código y el Explorador de soluciones para mostrar cómo encaja:

--------

Haga clic aquí para ver la ilustración

Haga clic en el botón Atrás de su navegador para volver

--------

Dado que su propio código es `igual que el código de Framework', es necesario añadir una referencia a NewNSMod en NSProj para utilizar el objeto en el espacio de nombres, aunque estén en la misma solución. Una vez hecho esto, puede declarar un objeto en NSProj basado en el método de NewNSMod. También es necesario "construir" el proyecto de manera que exista un objeto real al que hacer referencia.

Dim o As New NewNSProj.AVBNS.NewNSMod.NewNSObj

o.AVBNSMétodo()

Esa es una declaración bastante oscura. Podemos acortarlo usando una declaración de Importación con un alias.

Imports NS = NewNSProj.AVBNS.NewNSMod.NewNSObj

...

Dim o As New NS

o.AVBNSMethod()

Al hacer clic en el botón Ejecutar se muestra el cuadro de texto del espacio de nombres AVBNS, "Hey! Funcionó!"

Cuándo y por qué usar Namespaces

Hasta ahora todo ha sido sintaxis - las reglas de codificación que hay que seguir al usar namespaces. Pero para realmente tomar ventaja, necesitas dos cosas:

  1. Un requisito para la organización del espacio de nombres en primer lugar. Se necesita algo más que un proyecto de "Hello World" antes de que la organización de namespaces empiece a dar sus frutos.
  2. Un plan para usarlos.

En general, Microsoft recomienda que organice el código de su organización utilizando una combinación del nombre de su empresa con el nombre del producto.

Así que, por ejemplo, si usted es el Arquitecto Jefe de Software de Dr. No's Nose Knows Plastic Surgery, entonces podría querer organizar sus espacios de nombres como...

DRNo

   Consulting

      ReadTheirWatchNChargeEm

      TellEmNuthin

   Surgery

      ElephantMan

      MyEyeLidsRGone

Esto es similar a la organización de .NET ....

Object

   System

      Core

         IO

         Linq

      Data

         Odbc

         Sql

Los espacios de nombres multinivel se consiguen simplemente anidando los bloques de espacio de nombres.

Namespace DRNo

   Namespace Surgery

      Namespace MyEyeLidsRGone

' VB Code

      End Namespace

   End Namespace

End Namespace

... o ....

Namespace DRNo.Surgery.MyEyeLidsRGone

' VB Code

End Namespace

(0 votes)