2011-05-17 59 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