2012-10-27 12 views
1

나는 정적 클래스과 같이 있습니다 : 같은 프로젝트에서네임 스페이스

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

하지만 다른 네임 스페이스는 I 클래스는 정적 클래스 변수에 액세스하려고 있습니다

namespace Engine.MainProgram 
{ 
    public class MainProgram 
    { 
     int x; 
     int y; 
     public void LoadConfiguration() 
     { 
      x = Configuration.Configuration.i; 
     } 
    } 
} 
을 난 그냥과 같이 메인 프로 그램에서 사용하는 문을 배치하면된다 싶습니다 무엇

:

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

을하지만 visua하려고 할 때 Studio는 항상 Configuration을 정적 클래스 대신 네임 스페이스로 취급합니다. 내 질문은 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?

+10

하나의 방법 :'Using Configuration = Engine.Configuration.Configuration; .. x = Configuration.i;'. 네임 스페이스와 유형 이름을 고유하게 유지하는 것이 좋습니다. –

+0

귀하의 클래스 이름과 네임 스페이스 이름이 동일합니다. 이것은 모호합니다. 동일한 이름을 설정하지 마십시오! – Anirudha

답변

1

를 사용하는 컴파일러는 항상 네임 스페이스와 가진 클래스 이름을 구별하는 방법을 알고하지 않습니다 같은 이름.

변경이 :

using Engine.Configuration; 

namespace alias A를 :

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 = A.Configuration.i; 

하거나

x = global::Engine.Configuration.Configuration.i 
관련 문제