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 en nombres completos

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.

Palabra clave global en instrucciones de espacio de nombres

También puede utilizar la palabra clave de Global en. Namespace (Instrucción)Esto permite definir un espacio de nombres fuera del proyecto.

Todos los espacios de nombres del proyecto se basan en el espacio de nombres para el proyecto.Visual Studio asigna el nombre de proyecto como el espacio de nombres de raíz predeterminado para todo el código del proyecto.Por ejemplo, si el proyecto se denomina ConsoleApplication1, sus elementos de programación pertenecen al espacio de nombres ConsoleApplication1.Si declara Namespace Magnetosphere, las referencias a Magnetosphere en el proyecto tendrán acceso a ConsoleApplication1.Magnetosphere.

Los ejemplos siguientes se utiliza la palabra clave de Global para declarar un espacio de nombres al espacio de nombres para el proyecto.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

En una declaración de espacio de nombres, Global no se pueden anidar en otro espacio de nombres.

Puede usar Aplicación (Página, Diseñador de proyectos) (Visual Basic) para ver y modificar Espacio de nombres de la raíz del proyecto.Para los nuevos proyectos, los valores predeterminados de Espacio de nombres de la raíz en el nombre del proyecto.Para hacer Global para ser el espacio de nombres de nivel superior, puede desactivar la entrada de Espacio de nombres de la raíz de modo que el cuadro está vacío.Desactive Espacio de nombres de la raíz quita la palabra clave de Global en declaraciones de espacio de nombres.

Si una instrucción de Namespace declara un nombre que sea también un espacio de nombres en .NET Framework, el espacio de nombres de .NET Framework no esté disponible si la palabra clave de Global no se utiliza en un nombre completo.Para habilitar el acceso a ese espacio de nombres de .NET Framework sin utilizar la palabra clave de Global , puede incluir la palabra clave de Global en la instrucción de Namespace .

el ejemplo siguiente tiene la palabra clave de Global en la declaración de espacio de nombres de System.Text .

Si la palabra clave de Global no estaba presente en la declaración de espacio de nombres, StringBuilder no se pudo obtener acceso sin especificar Global.System.Text.StringBuilder.Para un proyecto denominado ConsoleApplication1, las referencias a System.Text tendrían acceso a ConsoleApplication1.System.Text si la palabra clave de Global no se utilizó.

Module Module1
    Sub Main()
        Dim encoding As New System.Text.TitanEncoding

        ' If the namespace defined below is System.Text
        ' instead of Global.System.Text, then this statement
        ' causes a compile-time error.
        Dim sb As New System.Text.StringBuilder
    End Sub
End Module

Namespace Global.System.Text
    Class TitanEncoding

    End Class
End Namespace

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)

Escribir código en soluciones de Office