2011-05-17 7 views
11
using Foo.Uber; 

namespace MyStuff.Foo 
{ 
    class SomeClass{ 
     void DoStuff(){ 
      // I want to reference the outer "absolute" Foo.Uber 
      // but the compiler thinks I'm refering to MyStuff.Foo.Uber 
      var x = Foo.Uber.Bar(); 
     } 
    } 
} 

¿Cómo podría solucionar esto? Simplemente mover la declaración de uso dentro de mi espacio de nombres no ayuda.Confusión de espacio de nombres absoluta/externa e interna en C#

+1

Algo así como usar Foo.Uber = FooUber; => ver http://stackoverflow.com/questions/262469/namespace-collisions – CodingBarfield

Respuesta

20

Usted puede hacer esto utilizando una namespace alias qualifier (típicamente global::) para referirse al espacio de nombres por defecto/root:

global::Foo.Uber

+0

(editado para agregar contexto ... las palabras son útiles) –

+1

Bien, no sabía esto. –

+0

Gracias, primera y mejor solución para mi caso. PD: Me gustó la respuesta no editada también. : p – Qtax

4

en realidad se puede especificar la ruta completa a través de la root namespace

var x = global::Foo.Uber.Bar(); 

Información general de los espacios de nombres

Un espacio de nombres tiene las siguientes propiedades:

  • Se organizan grandes proyectos de código.

  • Están delimitados con. operador.

  • El directiva using significa que no es necesario especificar el nombre del espacio de nombres para cada clase.

  • El mundial espacio de nombres es el espacio de nombres "raíz": :: sistema global se referirá siempre a la Sistema .NET Marco de espacio de nombres.

prefiero esto sobre los alias, porque cuando lo lee, que sabe exactamente lo que está pasando. Los alias pueden ser fáciles de malinterpretar si omite la definición.

3

Alias ​​el espacio de nombres en la instrucción using:

using ThatOuterFoo = Foo.Uber; 
... 
... 
//Some time later... 
var x = ThatOuterFoo.Bar(); 
2

Usando Aliaseseseseseses

using Foo.Uber; 
using FooUberBar = Foo.Uber.Bar 

namespace MyStuff.Foo 
{ 
    class SomeClass{ 
     void DoStuff(){ 
      // I want to reference the outer "absolute" Foo.Uber 
      // but the compiler thinks I'm refering to MyStuff.Foo.Uber 
      var x = FooUberBar(); 
     } 
    } 
} 
+0

sesesesseseseses –

3

Puede utilizar using alias directives

using Outer = Foo.Uber; 

namespace MyStuff.Foo 
{ 
    class SomeClass{ 
     void DoStuff(){     
      var x = new Outer.Bar(); //outer class 
     } 
    } 
} 
1

Puede asignar un alias en su directiva using como se describe en MSDN.

Cuestiones relacionadas