【问题标题】:Absolute/outer and inner namespace confusion in C#C# 中的绝对/外部和内部命名空间混淆
【发布时间】:2011-08-27 06:35:04
【问题描述】:
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】:

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

global::Foo.Uber

【讨论】:

  • 谢谢,我的案例的第一个也是最好的解决方案。 PS:我也喜欢未经编辑的答案。 :p
【解决方案2】:

在 using 语句中为命名空间命名:

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

【讨论】:

    【解决方案3】:

    您可以使用using alias directives

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

    【讨论】:

      【解决方案4】:

      您实际上可以通过root namespace指定完整路径

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

      命名空间概述

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

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

      • 它们用 .操作员。

      • using 指令 意味着您不需要指定 每个类的命名空间。

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

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

      【讨论】:

        【解决方案5】:

        使用别名

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

        【讨论】:

          【解决方案6】:

          您可以按照MSDN 中的说明在 using 指令中分配别名。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-13
            • 1970-01-01
            • 2013-12-18
            • 2012-03-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-06
            相关资源
            最近更新 更多