Espacios de nombres en Visual BasicNamespaces in Visual Basic

Los espacios de nombres organizan los objetos definidos en un ensamblado.Namespaces organize the objects defined in an assembly. Los ensamblados pueden contener varios espacios de nombres, que a su vez pueden contener otros espacios de nombres.Assemblies can contain multiple namespaces, which can in turn contain other namespaces. Los espacios de nombres evitan las ambigüedades y simplifican las referencias cuando se usan grupos de objetos grandes, como las bibliotecas de clases.Namespaces prevent ambiguity and simplify references when using large groups of objects such as class libraries.

Por ejemplo, .NET Framework define la ListBox clase en el System.Windows.Forms espacio de nombres.For example, the .NET Framework defines the ListBox class in the System.Windows.Forms namespace. En el siguiente fragmento de código se muestra cómo declarar una variable con el nombre completo de esta clase:The following code fragment shows how to declare a variable using the fully qualified name for this class:

Dim LBox As System.Windows.Forms.ListBox

Evitar conflictos de nombresAvoiding Name Collisions

Los espacios de nombres de .NET framework tratan un problema que a veces denominado contaminación del espacio de nombres, en que el desarrollador de una biblioteca de clases está obstaculizado por el uso de nombres similares en otra biblioteca..NET Framework namespaces address a problem sometimes called namespace pollution, in which the developer of a class library is hampered by the use of similar names in another library. Estos conflictos con componentes existentes a veces se denominan conflictos de nombres.These conflicts with existing components are sometimes called name collisions.

Por ejemplo, si crea una clase denominada ListBox, puede usarla en su proyecto sin ninguna calificación,For example, if you create a new class named ListBox, you can use it inside your project without qualification. Sin embargo, si desea usar .NET Framework ListBox clase en el mismo proyecto, debe usar una referencia completa para que sea único.However, if you want to use the .NET Framework ListBox class in the same project, you must use a fully qualified reference to make the reference unique. Si la referencia no es única, Visual Basic genera un error que indica que el nombre es ambiguo.If the reference is not unique, Visual Basic produces an error stating that the name is ambiguous. En el ejemplo de código siguiente se muestra cómo declarar estos objetos:The following code example demonstrates how to declare these objects:

' 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 espacio de nombres, que contiene un objeto denominado ListBox:The following illustration shows two namespace hierarchies, both containing an object named ListBox:

Captura de pantalla que muestra dos jerarquías de espacio de nombres.

De forma predeterminada, todos los archivos ejecutables que cree con Visual Basic contienen un espacio de nombres con el mismo nombre que el proyecto.By default, every executable file you create with Visual Basic contains a namespace with the same name as your project. Por ejemplo, si define un objeto en un proyecto denominado ListBoxProject, el archivo ejecutable ListBoxProject.exe contiene un espacio de nombres llamado ListBoxProject.For example, if you define an object within a project named ListBoxProject, the executable file ListBoxProject.exe contains a namespace called ListBoxProject.

Se puede usar el mismo espacio de nombres en varios ensamblados.Multiple assemblies can use the same namespace. Visual Basic los trata como un único conjunto de nombres.Visual Basic treats them as a single set of names. Por ejemplo, puede definir clases para un espacio de nombres ( SomeNameSpace ) en un ensamblado ( Assemb1) y definir clases adicionales para el mismo espacio de nombres desde un ensamblado denominado Assemb2.For example, you can define classes for a namespace called SomeNameSpace in an assembly named Assemb1, and define additional classes for the same namespace from an assembly named Assemb2.

nombres completosFully Qualified Names

Los nombres completos son referencias de objetos que llevan como prefijo el nombre del espacio de nombres en el que se define el objeto.Fully qualified names are object references that are prefixed with the name of the namespace in which the object is defined. Puede usar los objetos definidos en otros proyectos si crea una referencia a la clase (eligiendo Agregar referencia desde el menú Proyecto ) y usa el nombre completo del objeto en el código.You can use objects defined in other projects if you create a reference to the class (by choosing Add Reference from the Project menu) and then use the fully qualified name for the object in your code. En el siguiente fragmento de código se muestra cómo usar el nombre completo de un objeto desde el espacio de nombres de otro proyecto:The following code fragment shows how to use the fully qualified name for an object from another project's namespace:

Dim LBC As New ListBoxProject.Form1.ListBox

Los nombres completos evitan conflictos de nomenclatura, ya que permiten que el compilador determine el objeto que se está usando,Fully qualified names prevent naming conflicts because they make it possible for the compiler to determine which object is being used. aunque los nombres pueden llegar a ser largos y complicados.However, the names themselves can get long and cumbersome. Para solucionar este problema, puede usar la instrucción Imports para definir un alias: un nombre abreviado que puede usar en lugar de un nombre completo.To get around this, you can use the Imports statement to define an alias—an abbreviated name you can use in place of a fully qualified name. Por ejemplo, en el siguiente ejemplo de código se crean alias para dos nombres completos y se usan para definir dos objetos.For example, the following code example creates aliases for two fully qualified names, and uses these aliases to define two objects.

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

Si usa la instrucción Imports sin un alias, puede usar todos los nombres de ese espacio de nombres sin ninguna calificación, siempre que sean únicos en el proyecto.If you use the Imports statement without an alias, you can use all the names in that namespace without qualification, provided they are unique to the project. Si el proyecto contiene instrucciones Imports de los espacios de nombres que contienen elementos con el mismo nombre, debe calificar totalmente ese nombre en el momento de usarlo.If your project contains Imports statements for namespaces that contain items with the same name, you must fully qualify that name when you use it. Supongamos, por ejemplo, que el proyecto contenía las dos instrucciones Imports siguientes:Suppose, for example, your project contained the following two Imports statements:

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

Si intenta usar Class1 sin calificarla por completo, Visual Basic genera un error que indica que el nombre Class1 es ambiguo.If you attempt to use Class1 without fully qualifying it, Visual Basic produces an error stating that the name Class1 is ambiguous.

Instrucciones de nivel de espacio de nombresNamespace Level Statements

Dentro de un espacio de nombres, puede definir elementos tales como módulos, interfaces, clases, delegados, enumeraciones, estructuras y otros espacios de nombres.Within a namespace, you can define items such as modules, interfaces, classes, delegates, enumerations, structures, and other namespaces. Los elementos tales como propiedades, procedimientos, variables y eventos no se pueden definir en el nivel de espacio de nombres.You cannot define items such as properties, procedures, variables and events at the namespace level. Estos elementos deben declararse dentro de contenedores tales como módulos, estructuras o clases.These items must be declared within containers such as modules, structures, or classes.

Palabra clave Global en los nombres completosGlobal Keyword in Fully Qualified Names

Si ha definido una jerarquía anidada de espacios de nombres, el código insertado en esa jerarquía podría tener bloqueado el acceso al espacio de nombres System de .NET Framework.If you have defined a nested hierarchy of namespaces, code inside that hierarchy might be blocked from accessing the System namespace of the .NET Framework. En el siguiente ejemplo se muestra una jerarquía en la que el espacio de nombres SpecialSpace.System bloquea el acceso a System.The following example illustrates a hierarchy in which the SpecialSpace.System namespace blocks access to 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  

Como resultado, el compilador de Visual Basic no puede resolver correctamente la referencia a System.Int32, porque SpecialSpace.System no define Int32.As a result, the Visual Basic compiler cannot successfully resolve the reference to System.Int32, because SpecialSpace.System does not define Int32. Puede usar 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.You can use the Global keyword to start the qualification chain at the outermost level of the .NET Framework class library. De este modo, puede especificar el espacio de nombres System o cualquier otro espacio de nombres en la biblioteca de clases.This allows you to specify the System namespace or any other namespace in the class library. Esto se ilustra en el siguiente ejemplo:The following example illustrates this.

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 usar Global para obtener acceso a otros espacios de nombres de nivel de raíz, como Microsoft.VisualBasic, y a cualquier espacio de nombres asociado a su proyecto.You can use Global to access other root-level namespaces, such as Microsoft.VisualBasic, and any namespace associated with your project.

Palabra clave Global en las instrucciones de espacio de nombresGlobal Keyword in Namespace Statements

También puede usar la palabra clave Global en una Namespace Statement.You can also use the Global keyword in a Namespace Statement. con lo que podrá definir un espacio de nombres fuera del espacio de nombres raíz del proyecto.This lets you define a namespace out of the root namespace of your project.

Todos los espacios de nombres del proyecto se basan en el espacio de nombres raíz de este.All namespaces in your project are based on the root namespace for the project. Visual Studio asigna el nombre del proyecto como el espacio de nombres raíz predeterminado para todo el código del proyecto.Visual Studio assigns your project name as the default root namespace for all code in your project. Por ejemplo, si el proyecto se llama ConsoleApplication1, los respectivos elementos de programación pertenecerán al espacio de nombres ConsoleApplication1.For example, if your project is named ConsoleApplication1, its programming elements belong to namespace ConsoleApplication1. Si declara Namespace Magnetosphere, las referencias a Magnetosphere en el proyecto tendrán acceso a ConsoleApplication1.Magnetosphere.If you declare Namespace Magnetosphere, references to Magnetosphere in the project will access ConsoleApplication1.Magnetosphere.

En los siguientes ejemplos se usa la palabra clave Global para declarar un espacio de nombres fuera del espacio de nombres raíz del proyecto.The following examples use the Global keyword to declare a namespace out of the root namespace for the project.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

En una declaración de espacio de nombres, no se puede anidar Global en otro espacio de nombres.In a namespace declaration, Global cannot be nested in another namespace.

Puede usar la Application Page, Project Designer (Visual Basic) para ver y modificar el espacio de nombres raíz del proyecto.You can use the Application Page, Project Designer (Visual Basic) to view and modify the Root Namespace of the project. En cuanto a los proyectos nuevos, el espacio de nombres raíz tiene como nombre predeterminado el nombre del proyecto.For new projects, the Root Namespace defaults to the project name. Para que Global sea el espacio de nombres de nivel superior, puede borrar la entrada Espacio de nombres raíz para que el cuadro esté vacío.To cause Global to be the top-level namespace, you can clear the Root Namespace entry so that the box is empty. Si se borra Espacio de nombres raíz , ya no es necesario usar la palabra clave Global en las declaraciones de espacio de nombres.Clearing Root Namespace removes the need for the Global keyword in namespace declarations.

Si una instrucción Namespace declara un nombre que también es un espacio de nombres en .NET Framework, el espacio de nombres de .NET Framework dejará de estar disponible si la palabra clave Global no se usa en un nombre completo.If a Namespace statement declares a name that is also a namespace in the .NET Framework, the .NET Framework namespace becomes unavailable if the Global keyword is not used in a fully qualified name. Para habilitar el acceso al espacio de nombres de .NET Framework sin usar la palabra clave Global , puede incluir la palabra clave Global en la instrucción Namespace .To enable access to that .NET Framework namespace without using the Global keyword, you can include the Global keyword in the Namespace statement.

En el siguiente ejemplo aparece la palabra clave Global en la declaración de espacio de nombres System.Text .The following example has the Global keyword in the System.Text namespace declaration.

Si la palabra clave Global no estuviera presente en la declaración de espacio de nombres, no se podría obtener acceso a StringBuilder sin especificar Global.System.Text.StringBuilder.If the Global keyword was not present in the namespace declaration, StringBuilder could not be accessed without specifying Global.System.Text.StringBuilder. Para el proyecto ConsoleApplication1, las referencias a System.Text tendrían acceso a ConsoleApplication1.System.Text si no se usara la palabra clave Global .For a project named ConsoleApplication1, references to System.Text would access ConsoleApplication1.System.Text if the Global keyword was not used.

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énSee also