簡體   English   中英

C#中的絕對/外部和內部命名空間混淆

[英]Absolute/outer and inner namespace confusion in 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語句也無濟於事。

您可以使用命名空間別名限定符 (通常為global::來引用默認/根命名空間:

global::Foo.Uber

您實際上可以通過根命名空間指定完整路徑

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

命名空間概述

命名空間具有以下屬性:

  • 他們組織大型代碼項目。

  • 他們與。分開。 運營商。

  • using指令意味着您不需要為每個類指定命名空間的名稱。

  • 全局命名空間是“根”命名空間: global :: system將始終引用.NET Framework命名空間System

我喜歡這個而不是別名,因為當你閱讀它時,你確切地知道發生了什么。 如果跳過定義,別名很容易被誤解。

別名為using語句中的命名空間:

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

您可以使用別名指令

using Outer = Foo.Uber;

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

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

您可以在MSDN中描述的using指令中指定別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM