C#中的绝对/外部和内部命名空间混淆

时间:2011-05-17 13:55:21

标签: c#

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语句也无济于事。

6 个答案:

答案 0 :(得分:23)

您可以使用namespace alias qualifier(通常为global::)来引用默认/ root命名空间:

global::Foo.Uber

答案 1 :(得分:4)

您实际上可以通过root namespace

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

命名空间概述

     

命名空间具有以下内容   属性:

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

  •   
  • 他们与。分开。操作

  •   
  • using指令表示您无需指定其名称   每个类的命名空间。

  •   
  • 全局命名空间是“根”命名空间: global :: system   将始终引用.NET   框架命名空间系统

  •   

我更喜欢这个别名,因为当你阅读它时,你确切知道发生了什么。如果你跳过定义,别名很容易被误解。

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

您可以使用using alias directives

using Outer = Foo.Uber;

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

答案 4 :(得分:2)

使用Aliasesesesesese

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();
        }
    }
}

答案 5 :(得分:1)

您可以按照MSDN中所述在using指令中指定别名。