Namespace (Instrucción)

Actualización: noviembre 2007

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

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

Partes

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

  • componenttypes
    Opcional. Elementos que forman el espacio de nombres. Entre estos elementos se pueden citar enumeraciones, estructuras, interfaces, clases, módulos, delegados y otros espacios de nombres.

  • End Namespace
    Termina un bloque Namespace.

Comentarios

Los espacios de nombres se utilizan como un sistema de organización. 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 en que lo son una clase o una estructura; es decir, no puede declarar que un elemento de programación tenga el tipo de datos de un espacio de nombres.

Sólo puede utilizar una instrucción Namespace en el nivel de archivo o de 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, estructura, módulo, interfaz o procedimiento. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados.

Los espacios de nombres se tratan como si contasen con un nivel de acceso de tipo Public. Se puede tener acceso a un espacio de nombres desde el código del mismo proyecto, desde otros proyectos que hacen referencia al proyecto y desde los ensamblados creados a partir del proyecto.

Reglas

  • Atributos. No puede aplicar atributos a un espacio de nombres. Los atributos incorporan información a los metadatos del ensamblado, que no son significativos para los clasificadores de origen como los espacios de nombres.

  • Modificadores. No puede aplicar modificadores de acceso ni de procedimiento ni cualquier otro modificador a un espacio de nombres. Dado que no es un tipo, estos modificadores no son significativos.

  • Anidado. Puede declarar un espacio de nombres dentro de otro. No existe un límite estricto en cuanto a los niveles de anidamiento que se pueden declarar, pero debe recordar que si otro código tiene acceso a los elementos declarados en el espacio de nombres más interno, debe usar una cadena de calificación con los nombres de todos los espacios de nombres de la jerarquía de anidamiento.

Comportamiento

  • Nivel de acceso. Los elementos de programación declarados en el nivel del espacio de nombres, es decir, dentro de un espacio de nombres pero no dentro de cualquier otro elemento, pueden tener acceso de tipo Public o Friend. Si no se especifica, el nivel de acceso de dichos elementos usa Friend de manera 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 Contextos de declaración y niveles de acceso predeterminados.

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

  • Agregar a un espacio de nombres. Si ya se ha definido un espacio de nombres, aunque sea fuera del proyecto, puede agregar en él elementos de programación. Para ello, utiliza una instrucción Namespace para indicar a Visual Basic que compile los elementos siguientes en dicho espacio de nombres.

    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
    
  • Espacio de nombres de la raíz. Todos los nombres de espacios de nombres del proyecto se basan en un espacio de nombres de raíz. 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 Payroll, sus elementos de programación pertenecen al espacio de nombres Payroll. Si declara Namespace funding, el nombre completo de ese espacio de nombres es Payroll.funding.

    Si desea especificar un espacio de nombres existente en una instrucción Namespace, como en el ejemplo de la clase de lista genérica, puede establecer el espacio de nombres de la raíz en un valor nulo. Para ello, en el menú Proyecto, haga clic en Propiedades del proyecto y borre la entrada Espacio de nombres de la raíz para dejar el cuadro vacío. Si no ha realizado esto en el ejemplo de la clase de lista genérica, el compilador de Visual Basic considera System.Collections.Generic como un nuevo espacio de nombres en el proyecto Payroll, con el nombre completo Payroll.System.Collections.Generic.

    También puede utilizar la palabra clave Global para hacer referencia a los elementos de espacios de nombres definidos fuera del proyecto. Esto permite conservar el nombre del proyecto como espacio de nombres de la raíz. Así se reduce la posibilidad de combinar involuntariamente los elementos de programación con aquéllos de los espacios de nombres existentes.

Solución de problemas

  • Tipos indefinidos. El espacio de nombres de la 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 generarlos como espacios de nombres anidados dentro del espacio de nombres de la raíz. En este caso, el compilador no reconoce los tipos ya definidos en los espacios de nombres externos. Para evitarlo, establezca el espacio de nombres de la raíz con un valor nulo como se describe en "Espacio de nombres de la raíz" o utilice la palabra clave Global para obtener acceso a los elementos de espacios de nombres externos.

Ejemplo

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

En el siguiente ejemplo se declaran varios espacios de nombres anidados en una única línea; este ejemplo es equivalente al anterior.

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

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

Dim instance As New n1.n2.a

Vea también

Conceptos

Nombres de elementos declarados

Espacios de nombres en Visual Basic

Referencia

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

Global