2011-05-17 55 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(); 
     } 
    } 
} 

我该如何解决这个问题?只是在我的名字空间内移动using语句并没有帮助。C#中的绝对/外部和内部命名空间混淆#

+1

类似于使用Foo.Uber = FooUber; =>参见http://stackoverflow.com/questions/262469/namespace-collisions – CodingBarfield 2011-05-17 14:09:11

回答

20

可以使用做这namespace alias qualifier(通常global::)指默认/根命名空间:

global::Foo.Uber

+0

(编辑添加上下文...词有用) – 2011-05-17 14:00:52

+1

不错,我不知道这一点。 – 2011-05-17 14:01:23

+0

谢谢,我的案例的第一个也是最好的解决方案。 PS:我也喜欢未经编辑的答案。 :p – Qtax 2011-05-17 14:07:34

4

实际上,你可以通过root namespace

var x = global::Foo.Uber.Bar(); 
指定完整路径

命名空间概述

命名空间具有以下 属性:

  • 他们组织大型的代码项目。

  • 它们与分隔符。运营商。

  • 使用指令意味着您不需要为每个类指定名称空间的名称 。

  • 全球命名空间是“根”命名空间:全球::系统 总是会请参阅.NET框架 命名空间系统

我宁愿这些别名,因为当你读它,你确切地知道是怎么回事。如果跳过定义,别名很容易被误解。

3

别名命名空间中使用的语句:

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

使用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 – 2011-05-17 14:08:34

3

您可以使用using alias directives

using Outer = Foo.Uber; 

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

您可以在您使用指令指定一个别名描述在MSDN