2012-10-27 27 views
1

我有一個靜態類,像這樣:命名空間在C#中同一項目

namespace Engine.Configuration 
{ 
    public static class Configuration 
    { 
     public static int i; 
    } 
} 

在同一個項目,但不同的命名空間我有一個類試圖訪問靜態類變量:

namespace Engine.MainProgram 
{ 
    public class MainProgram 
    { 
     int x; 
     int y; 
     public void LoadConfiguration() 
     { 
      x = Configuration.Configuration.i; 
     } 
    } 
} 

我想什麼做的僅僅是放置一個using語句在MainProgram(主程序),像這樣:

using Engine.Configuration; 
... 
x = Configuration.i; 

但是,當我嘗試visua l studio始終將配置視爲名稱空間而不是靜態類。我的問題是爲什麼會發生這種情況,我該如何糾正?

+10

一種方法:'使用Configuration = Engine.Configuration.Configuration; .. x = Configuration.i;'。雖然我會建議保持名稱空間和類型名稱獨一無二。 – 2012-10-27 19:49:22

+0

你的類名和命名空間名是相同的。這是不明確的。你應該避免設置相同的名字! – Anirudha

回答

1

編譯器並不總是知道如何將一個命名空間,並與類名區分一樣的名字。

更改此:

using Engine.Configuration; 

要將namespace alias

using Configuration = Engine.Configuration.Configuration; 

Explenation:

比方說,你直接在根命名空間下工作,發動機,像這樣:

namespace Engine 
{ 
} 

然後你就可以得到在其他名稱空間這樣的事情:

namespace Engine 
{ 
    Engine.Configuration.Configuration; 

    // Or since you are in the root (Engine) you don't need to specify Engine: 
    // You can always omit the root namespace if the namespace you're in has the same root. 
    Configuration.Configuration; 
} 

或者通過使用命名空間聲明,但是編譯器會不知道你指的是命名空間或命名空間中的類:

using Engine.Configuration; 

namespace Engine 
{ 
    // This will still work. 
    Engine.Configuration.Configuration; 

    // This will break, do we mean "Engine.Configuration.Configuration" or "Engine.Configuration"? 
    Configuration; 
} 

所以這是一個很好的做法,永遠不會有相同名稱的一類,因爲它生活在命名空間。也許命名空間更改爲Engine.Configuration 小號

+0

非常好的解釋:) – Bob

2

嘗試:

using A = Engine.Configuration; 

然後

​​

或只使用

x = global::Engine.Configuration.Configuration.i