Namespace (Instrucción)

Declara el nombre de un espacio de nombres y hace que el código fuente que sigue a la declaración se compile dentro de ese espacio de nombres.

Sintaxis

Namespace [Global.] { name | name.name }
    [ componenttypes ]
End Namespace

Partes

Global Opcional. Permite definir un espacio de nombres fuera del espacio de nombres raíz del proyecto. Consulte Espacios de nombres en Visual Basic.

name Obligatorio. Nombre único que identifica el espacio de nombres. Debe ser un identificador de Visual Basic válido. Para obtener más información, consulte Nombres de elementos declarados.

componenttypes Opcional. Elementos que componen el espacio de nombres. Entre ellos se incluyen, entre otros, enumeraciones, estructuras, interfaces, clases, módulos, delegados y otros espacios de nombres.

End Namespace Finaliza un bloque Namespace.

Comentarios

Los espacios de nombres se usan como sistema organizativo. Proporcionan una manera de clasificar y presentar elementos de programación que se exponen a otros programas y aplicaciones. Tenga en cuenta que un espacio de nombres no es un tipo en el sentido de como lo son una clase o una estructura, no se puede declarar un elemento de programación para tener el tipo de datos de un espacio de nombres.

Todos los elementos de programación declarados después de una instrucción Namespace pertenecen a ese espacio de nombres. Visual Basic continúa compilando elementos en el último espacio de nombres declarado hasta que encuentra una instrucción End Namespace u otra instrucción Namespace.

Si ya se ha definido un espacio de nombres, incluso fuera del proyecto, puede agregarle elementos de programación. Para ello, use una instrucción Namespace para dirigir Visual Basic para compilar elementos en ese espacio de nombres.

Puede usar una instrucción Namespace solo en el nivel de archivo o espacio de nombres. Esto significa que el contexto de la declaración de un espacio de nombres debe ser un archivo de código fuente u otro espacio de nombres y no puede ser una clase, una estructura, un módulo, una interfaz o un procedimiento. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).

Puede declarar un espacio de nombres dentro de otro. No hay ningún límite estricto en los niveles de anidamiento que se pueden declarar, pero recuerde que cuando otro código accede a los elementos declarados en el espacio de nombres más interno, debe usar una cadena de calificación que contenga todos los nombres de espacio de nombres en la jerarquía de anidamiento.

Nivel de acceso

Los espacios de nombres se tratan como si tuvieran un nivel de acceso Public. Se puede acceder a un espacio de nombres desde el código en cualquier parte del mismo proyecto, desde otros proyectos que hacen referencia al proyecto y desde cualquier ensamblado compilado desde el proyecto.

Los elementos de programación declarados en el nivel de espacio de nombres, es decir en un espacio de nombres pero no dentro de ningún otro elemento, pueden tener acceso Public o Friend. Si no se especifica, el nivel de acceso de este elemento usa Friend de forma predeterminada. Los elementos que puede declarar en el nivel de espacio de nombres incluyen clases, estructuras, módulos, interfaces, enumeraciones y delegados. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).

Espacio de nombres raíz

Todos los nombres de espacio de nombres del proyecto se basan en un espacio de nombres raíz. Visual Studio asigna el nombre del proyecto como el espacio de nombres raíz predeterminado para todo el código del proyecto. Por ejemplo, si el proyecto se llama Payroll, los respectivos elementos de programación pertenecerán al espacio de nombres Payroll. Si declara Namespace funding, el nombre completo de ese espacio de nombres es Payroll.funding.

Si quiere especificar un espacio de nombres existente en una instrucción Namespace, como en el ejemplo de clase de lista genérica, puede establecer el espacio de nombres raíz en un valor NULL. Para ello, haga clic en Propiedades del proyecto en el menú Proyecto y, posteriormente, desactive la entrada Espacio de nombres raíz para que el cuadro esté vacío. Si no lo hizo en el ejemplo de clase de lista genérica, el compilador de Visual Basic adoptará System.Collections.Generic como un nuevo espacio de nombres dentro del proyecto Payroll, con el nombre completo de Payroll.System.Collections.Generic.

Como alternativa, puede usar la palabra clave Global para hacer referencia a elementos de espacios de nombres definidos fuera del proyecto. Si lo hace, puede conservar el nombre del proyecto como espacio de nombres raíz. Esto reduce la posibilidad de combinar accidentalmente los elementos de programación junto con los de los espacios de nombres existentes. Para obtener más información, consulte la sección "Palabra clave Global en los nombres completos" en Espacios de nombres en Visual Basic.

También puede usar la palabra clave Global en una instrucción Namespace. con lo que podrá definir un espacio de nombres fuera del espacio de nombres raíz del proyecto. Para obtener más información, consulte "Palabra clave Global en las instrucciones de espacio de nombres" en Espacios de nombres en Visual Basic.

Solución de problemas. El espacio de nombres raíz puede provocar concatenaciones inesperadas de nombres de espacio de nombres. Si hace referencia a espacios de nombres definidos fuera del proyecto, el compilador de Visual Basic puede interpretarlos como espacios de nombres anidados en el espacio de nombres raíz. En tal caso, el compilador no reconoce ningún tipo que ya se haya definido en los espacios de nombres externos. Para evitarlo, establezca el espacio de nombres raíz en un valor NULL como se describe en "Espacio de nombres raíz" o use la palabra clave Global para acceder a los elementos de los espacios de nombres externos.

Atributos y modificadores

No se pueden aplicar atributos a un espacio de nombres. Un atributo contribuye con información a los metadatos del ensamblado, que no es significativo para los clasificadores de origen, como los espacios de nombres.

No puede aplicar ningún modificador de acceso o procedimiento, ni ningún otro modificador, a un espacio de nombres. Dado que no es un tipo, estos modificadores no son significativos.

Ejemplo 1

En el ejemplo siguiente se declaran dos espacios de nombres, uno anidado en el otro.

Namespace n1
    Namespace n2
        Class a
            ' Insert class definition.
        End Class
    End Namespace
End Namespace

Ejemplo 2

En el ejemplo siguiente se declaran varios espacios de nombres anidados en una sola línea, y es equivalente al ejemplo anterior.

Namespace n1.n2
    Class a
        ' Insert class definition.
    End Class
End Namespace

Ejemplo 3

En el ejemplo siguiente se obtiene acceso a la clase definida en los ejemplos anteriores.

Dim instance As New n1.n2.a

Ejemplo 4

En el ejemplo siguiente se define el esqueleto de una nueva clase de lista genérica y se agrega al espacio de nombres System.Collections.Generic.

Namespace System.Collections.Generic
    Class specialSortedList(Of T)
        Inherits List(Of T)
        ' Insert code to define the special generic list class.
    End Class
End Namespace

Consulte también