2011-01-19 9 views

Respuesta

5

con :: puede hacer cosas como ...

extern alias X; 
extern alias Y; 
class Test 
{ 
    X::N.A a; 
    X::N.B b1; 
    Y::N.B b2; 
    Y::N.C c; 
} 

y hay momentos en que. es ambiguo así que :: es necesario. aquí está el ejemplo del lenguaje C# spec

namespace N 
{ 
    public class A {} 
    public class B {} 
} 
namespace N 
{ 
    using A = System.IO; 
    class X 
    { 
     A.Stream s1;   // Error, A is ambiguous 
     A::Stream s2;  // Ok 
    } 
} 

http://download.microsoft.com/download/0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp%20Language%20Specification.htm

+0

¿Estás diciendo que '' :: sólo funciona con espacios de nombres, mientras que '.' trabaja con todo excepto' global'? – Mehrdad

+0

sí, el hecho de que :: es solo para espacios de nombres significa que puede usarlo para resolver la ambigüedad que no puede ser resuelto por. –

6

el operador :: sólo funciona con los alias global es un sistema especial previsto alias.

así que ... esto funciona:

using Foo = System.ComponentModel; 

public MyClass { 

    private Foo::SomeClassFromSystemComponentModel X; 

} 

pero no esto:

public MyClass { 

    private System.ComponentModel::SomeClassFromSystemComponentModel X; 

} 

Esto le permite escapar del infierno de espacios de nombres de sub que puede ocurrir cuando se está integrando con una biblioteca donde tienen:

namespace MyAwesomeProduct.System 
{ 

} 

Y en que tienen código

using MyAwesomeProduct; 

global :: le permite encontrar el sistema real.

MSDN info here

+0

Hm ... está explicando por qué 'global ::' es útil, pero no exactamente la diferencia entre '::' y '.' ... – Mehrdad

+2

:: * solamente * funciona con alas, de esa manera si alguien declara un espacio de nombre o un espacio de subnombre posterior que tenga el mismo espacio de nombres que alias, su código estará bien. Es el operador de salir de la cárcel para la resolución del espacio de nombres secundario si lo desea. Usted tiene control de alaises en su archivo, pero otras personas controlan los espacios de nombres de las bibliotecas que usa. :: le da control cuando otros espacios de nombres se las arreglan para cambiar el significado de su código. – Neil

+0

+1 Genial, gracias. – Mehrdad

Cuestiones relacionadas