2014-11-04 3 views
0

그래서 여기에 하나의 네임 스페이스가 다른 네임 스페이스 안에있는 스 니펫이 있습니다 (B는 A 안에 있음). 일반적으로 'using SpaceA;'를 사용하면 SpaceA를 입력하지 않고도 모든 요소에 액세스 할 수 있습니다. 이것은 A 클래스의 경우이지만 SpaceA.SpaceB를 입력하지 않고도 SpaceB를 볼 수 없습니다. 왜 이런거야? 여기 코드입니다 : 일반적으로 사용할 때다른 네임 스페이스와 마찬가지로 네임 스페이스를 스택 할 수는 없습니까?

using System; 

using SpaceA; 

namespace SpaceA 
{ 
    class A 
    { 
     public A() 
     { 
      Console.WriteLine("A"); 
     } 
    } 

    namespace SpaceB 
    { 
     public class B 
     { 
      public B() 
      { 
       Console.WriteLine("B"); 
      } 
     } 
    } 
} 

namespace TestingCSharp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //This does not work 
      SpaceB.B x = new SpaceB.B(); 

      //This does work 
      SpaceA.SpaceB.B y = new SpaceA.SpaceB.B(); 
     } 
    } 
} 

답변

2

'SpaceA를 사용하여;' SpaceA를 입력하지 않고도 모든 요소에 액세스 할 수 있습니다.

SpaceA의 구성원 만 직접 유형. namespace-or-type-name은 일반적인 using 지시문의 네임 스페이스를 사용하여 해결되지 않으며 그 다음 이름에 다른 "하위 네임 스페이스"가 사용됩니다. 이 유형 선언하는 방법과는 (중첩 된 네임 스페이스 선언하거나 namespace SpaceA.SpaceB 데의 측면에서) 아무 상관이 없다는 것을 참고 - 또 다른 예는 다음과 같습니다

using System; 

... 
Xml.Linq.XElement x = null; // Invalid 

항을 참조 정확한에 대한 C# 5 스펙 3.8 이름이 어떻게 해석되는지에 대한 세부 사항. 하는 다른 네임 스페이스

using X = System.Xml; 
... 
X.Linq.XElement x = null; // Valid 
을 찾기 위해 사용될 수 있음을 지적하면, 네임 스페이스에 대한 사용하여 별칭 지시어가있는 경우이에

약간의 차이는

관련 문제