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.
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)
Conceptos
Ensamblados y caché global de ensamblados (C# y Visual Basic)