2012-02-25 28 views

Respuesta

16

Es el espacio de nombres "global" - que obliga al compilador para buscar un nombre sin tomar otros utilizando directivas en consideración . Por ejemplo, supongamos que tiene:

public class Bar{} 

namespace Foo 
{ 
    public class Bar {} 

    public class Test 
    { 
     static void Main() 
     { 
      Bar bar1 = null; // Refers to Foo.Bar 
      global::Bar bar2 = null; // Refers to the "top level" Bar 
     } 
    } 
} 

Básicamente se trata de una forma de evitar colisiones de nombres - que es más probable verlo en código de la herramienta-generado, donde la herramienta no conoce necesariamente todos los otros tipos de el sistema. Es más raro necesitarlo en código escrito manualmente.

Consulte "How to: Use the global namespace alias" en MSDN para obtener más información, junto con :: namespace qualifier.

+1

Así es, Es generado por Microsoft marco de la entidad, cuando se trata de generar código a partir de un archivo de .edmx. Muchas gracias – user1010572

5

Es el alias del espacio de nombres global.

Si declara un tipo llamado System.Int32 en su base de código, puede distinguir el construido en .NET uno utilizando este alias.

// your code 
namespace System 
{ 
    public class Int32 
    { 
    } 
} 

// You could reference the BCL System.Int32 like this: 
global::System.Int32 bclInt; 
System.Int32 myInt; 

Ver How to: Use the Global Namespace Alias (C# Programming Guide) en MSDN.

+0

Su 'Int32' es' global :: System.Int32': su espacio de nombres 'System' no está anidado. Además, los espacios de nombres no tienen visibilidad. – hvd

+0

@hvd: Por supuesto, los espacios de nombres tienen * visibility *; deben tener * visibilidad * porque pueden * ocultarse *, y un espacio de nombre * oculto * por definición no es * visible *. Creo que quizás quisiste decir que los espacios de nombres no tienen * accesibilidad *, aunque es una forma extraña de caracterizar el acceso al espacio de nombres; una mejor manera de pensarlo es que * todos los espacios de nombres tienen acceso público *. –

+0

@EricLippert Admitiré que nunca he oído hablar de espacios de nombres ocultos. Después de buscarlo, ¿se refiere a los espacios de nombres en un ensamblaje externo que solo contiene clases internas? Si es así, Visual Studio y el compilador C# no están de acuerdo en si son visibles: 'using System.Data.Entity.Internal;' está subrayado como un error, pero aceptado por el compilador. No sé lo que dice la especificación. – hvd