2012-12-05 3 views
3

그래, SystemSystem.Web이 있습니다. 나는이 제안하는 구조 인 것을 수정 : 오전 C# 네임 스페이스에 대한 빠른 확인

namespace System 
{ 
    // all of the outer namespace members 

    namespace Web 
    { 
     // all of the inner members 
    } 
} 

그리고 네임 스페이스 만이 자동으로 자녀에 가져 오지 않는 부모/외부 공간 using 지시자를 가진 다른 내에 중첩 될 때/그

중첩 된 네임 스페이스? 즉 :

using System; 

public class Example 
{ 
    public Example() 
    { 
     context1 = new HttpContext(); // won't work 

     context2 = new System.Web.HttpContext(); // will work 
    } 
} 

실제로이 사실을 올바르게 이해하고 있는지 확인하려고합니다. 그러나

namespace System.Web 
{ 
    public class HttpContext {} 
} 

, 실제로 아이 네임 스페이스 선언 할 수있을 것입니다 :

답변

2

당신 둥지 네임 스페이스 만 참조하고 특정 네임 스페이스에 정의 된 멤버에 대한 액세스 권한을 부여하는 어떤 using 지시어. 귀하의 예제에서 그래서

: System 당신이 외부 네임 스페이스 회원들에게 접근하고 System.Web를 참조하는 것은 당신이 내부 네임 스페이스의 모든 구성원에 대한 액세스 권한을 부여 할 부여 것입니다 참조하는

namespace System 
{ 
    // all of the outer namespace members 

    namespace Web 
    { 
     // all of the inner members 
    } 
} 

.

그러나 일반적으로 이름 공간은 파일 내에서 한 번만 정의됩니다.

 
WebApplication 
    - Models 
     - MyModel.cs 
    - Controllers 
     - MyController.cs 

WebApplication.ModelsWebApplication.Controllers의 네임 스페이스를 사용할 수 있습니다 : 같은 중첩 된 파일이되도록 점 표기는 일반적으로 폴더 또는 프로젝트 구조를 따른다.

네임 스페이스를 중첩시키고 자하는 내 머리 꼭대기에서 훌륭한 예를 생각할 수는 없지만 좋은 이유가있을 수 있습니다. 그러나 그것은 내 생각에 규칙의 예외로 간주됩니다.

+0

점 표기법 설명에 대한 답변으로 선택되었습니다. –

+0

네임 스페이스가 "참조"또는 "액세스"와 아무 관련이 있다고 생각하지 않지만 그게 나 일뿐입니다. –

3

System.Web 같이하는 선언

namespace System 
{ 
    namespace Web 
    { 
     public class HttpContext {} 
    } 
} 

내가 이런 일을 본 적이 없다을하지만, 구문을 수 있습니다 그 효과는 동일합니다. 두 경우 모두 HttpContext의 네임 스페이스는 System.Web.HttpContext입니다.

두 번째 예의 경우에도 using System;은 하위 네임 스페이스를 가져 오지 않지만 해당 네임 스페이스에 유형 만 가져옵니다.

+0

아, 그래서 그것은 독립 실행 형 네임 스페이스입니까? –

+0

나는 그것이 실제로 어떤 차이가 있다고 생각하지 않는다. –

+0

@ KevinM1 :이 경우 예. 그러나 실제로 차이를 만들지 않습니다, 제발 내 대답을 참조하십시오. –

1

예, using 지시문은 해당 네임 스페이스에 선언 된 형식 만 네임 스페이스 한정자없이 사용할 수 있습니다. 중첩 된 네임 스페이스는 자동으로 포함되지 않습니다.

1

Daniel이 말했듯이 System.Web은 별도로 선언되지 않습니다. SystemSystem.Web은 기술적으로 관련이없는 두 개의 별도의 네임 스페이스입니다.

HttpContextSystem 네임 스페이스에 없기 때문에 new HttpContext()의 코드 예가 ​​작동하지 않습니다.

관련 문제