Espacios de nombres en Visual Basic

Los espacios de nombres organizan los objetos definidos en un ensamblado. Un ensamblado puede contener varios espacios de nombres; éstos, a su vez, pueden contener otros espacios de nombres. Los espacios de nombres evitan las ambigüedades y simplifican las referencias cuando se utilizan grupos grandes de objetos, como bibliotecas de clases.

Por ejemplo, .NET Framework define la clase ListBox en el espacio de nombres System.Windows.Forms. El fragmento de código siguiente muestra cómo se puede declarar una variable utilizando el nombre completo de esta clase:

Dim LBox As System.Windows.Forms.ListBox

Evitar los conflictos de nombres

Los espacios de nombres de .NET Framework resuelven un problema que a veces se denomina contaminación de espacios de nombres y que hace referencia a los obstáculos con los que tropieza el desarrollador de una biblioteca de clases debido al uso de nombres similares en otra biblioteca. Estos conflictos con componentes existentes a veces se denominan conflictos de nombres.

Por ejemplo, si crea una nueva clase denominada ListBox, podrá utilizarla en el propio proyecto sin necesidad de calificación. No obstante, si desea usar la clase ListBox de .NET Framework en el mismo proyecto, deberá usar una referencia completa para que sea única. Si la referencia no es única, Visual Basic genera un error que indica que el nombre es ambiguo. En el ejemplo de código siguiente se muestra cómo declarar objetos de este tipo:

' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

La siguiente ilustración muestra dos jerarquías de espacios de nombres; ambas contienen un objeto denominado ListBox.

Jerarquía de espacios de nombres

De forma predeterminada, todos los archivos ejecutables creados con Visual Basic contienen un espacio de nombres cuyo nombre es igual que el del proyecto. Por ejemplo, si se define un objeto en un proyecto denominado ListBoxProject, el archivo ejecutable, ListBoxProject.exe, contendrá un espacio de nombres denominado ListBoxProject.

Varios ensamblados pueden usar el mismo espacio de nombres. Visual Basic los trata como un solo conjunto de nombres. Por ejemplo, pueden definirse clases para un espacio de nombres denominado SomeNameSpace en un ensamblado denominado Assemb1, y definirse clases adicionales para el mismo espacio de nombres desde un ensamblado denominado Assemb2.

Nombres completos

Los nombres completos son referencias de objetos que llevan como prefijo el nombre del espacio de nombres en el que está definido el objeto. Si se crea una referencia a la clase (eligiendo Agregar referencia del menú Proyecto) se pueden utilizar objetos definidos en otros proyectos y, después, utilizar el nombre completo del objeto en el código. En el fragmento de código siguiente se muestra cómo utilizar el nombre completo para un objeto del espacio de nombres de otro proyecto:

Dim LBC As New ListBoxProject.Form1.ListBox

Los nombres completos evitan los conflictos de nombres porque permiten al compilador determinar qué objeto se utiliza. No obstante, los nombres pueden llegar a ser largos y complicados. Para solucionar este problema, puede utilizar la instrucción Imports para definir un alias, es decir, un nombre abreviado que sustituya al nombre completo. Por ejemplo, en el código siguiente se crean alias para dos nombres completos y se utilizan para definir dos objetos.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Si utiliza la instrucción Imports sin un alias, puede utilizar todos los nombres del espacio de nombres sin calificación, a condición de que sean únicos en el proyecto. Si el proyecto contiene instrucciones Imports para espacios de nombres que contienen elementos con el mismo nombre, deberá usar nombres completos. Supongamos, por ejemplo, que el proyecto contiene estas instrucciones Imports:

' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

Si intenta usar Class1 sin que su nombre sea completo, Visual Basic genera un error para indicar que el nombre de Class1 es ambiguo.

Instrucciones en el nivel de espacio de nombres

Dentro de un espacio de nombres pueden definirse elementos como los módulos, interfaces, clases, delegados, enumeraciones, estructuras y otros espacios de nombres. Los elementos no se pueden definir como propiedades, procedimientos, variables y eventos en el nivel de espacio de nombres. Estos elementos se deben declarar dentro de los contenedores como módulos, estructuras o clases.

Palabra clave Global

Si ha definido una jerarquía anidada de espacios de nombres, el código dentro de esta jerarquía puede tener el acceso bloqueado al espacio de nombres System de .NET Framework. En el ejemplo siguiente se ilustra una jerarquía en la que el espacio de nombres SpecialSpace.System bloquea el acceso a System.

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As System.Int32
                Dim n As System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

En consecuencia, el compilador de Visual Basic no puede resolver correctamente la referencia a System.Int32 porque SpecialSpace.System no define Int32. Puede utilizar la palabra clave Global para iniciar la cadena de calificación en el nivel más externo de la biblioteca de clases de .NET Framework. Esto permite especificar el espacio de nombres System o cualquier otro espacio de nombres en la biblioteca de clases. Esto se ilustra en el siguiente ejemplo:

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As Global.System.Int32
                Dim n As Global.System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

Puede utilizar Global para tener acceso a otros espacios de nombres de nivel de raíz, como Microsoft.VisualBasic, y a cualquier espacio de nombres asociado a su proyecto.

Vea también

Tareas

Cómo: Crear y utilizar ensamblados desde la línea de comandos (C# y Visual Basic)

Referencia

Instrucción Imports (Tipo y espacio de nombres de .NET)

ListBox

System.Windows.Forms

Conceptos

Ensamblados y caché global de ensamblados (C# y Visual Basic)

Referencias y la instrucción Imports (Visual Basic)