2010-07-13 5 views
2

비주얼 스튜디오 2010에서 네임 스페이스 선언을위한 새로운 규칙, 닷넷 4.0버그 또는 닷넷 4.0

좀 도메인 서비스 클래스를 생성하고 있는데이 방법 비주얼 스튜디오는 네임 스페이스를 포함 이 클래스가 필요로하는 네임 스페이스는 네임 스페이스 선언 안에 포함됩니다. 즉, bla bla bla 라인 사용은 MyCoolProject.Web.Services 네임 스페이스 선언 안에 있고 외부에는 없습니다. 이것은 새로운 대회입니까? 아니면 vs2010 버그입니까?

+0

Juval은 Programming .NET Components에서이 연습을 권장하지만 왜 기억하지 못합니다. 이 링크는 그를 반대합니다. http://consultingblogs.emc.com/anthonysteele/archive/2007/10/12/IDesign-C_2300_-Coding-standards.aspx – kenny

+0

빠른 응답과이를 명확히하기 위해 모두에게 감사드립니다. – andreiursan

답변

7

.NET 1.0 이후로 이름 공간 내에 using 지시문을 배치 할 수 있습니다. using 지시문에 포함 된 형식은 using 문을 포함하는 네임 스페이스 내부에서만 볼 수 있기 때문에이 작업은 네임 스페이스 분출을 피하기 위해 수행됩니다. 그래서 그들은 코드 생성기를 가능한 한 가장 깊은 네임 스페이스에 using 지시어를 넣도록 권장 된 방법을 따르도록 변경했습니다. using 지시문을 네임 스페이스 외부에 배치하면 글로벌 루트 네임 스페이스에 포함이 수행됩니다.

자세한 내용은 StyleCop 규칙 SA1200을 참조하십시오.

UPDATE

대답은 조금 unprecise합니다 - using 지침의 위치는 C#을 것입니다, 따라서 그것은 대신 는 "때문에 가능하다"C# 1.0부터 가능하다 "읽어야합니다. NET 1.0 ". (StyleCop에 의해 강제로)을 namespace는 Microsoft 내부에서 코드 스타일 규칙의 일부입니다 내부 using 지시를 두는

3

. 개인적으로 나는 그것을 참을 수는 없지만 그것이 무엇인지 알 수 있습니다. 같은 코드에 정의 된 여러 클래스 (다른 네임 스페이스에!)가있는 경우 실제로 달라질 수있는 유일한 상황이라고 말하면서 옳다고 생각합니다. 파일으로 널리 널리 사용되고 있습니다.

C# 1.0부터 허용되는 구문이었습니다.

3

using 문을 StyleCop 규칙을 기반으로하는 네임 스페이스 내에 배치하는 것이 관례이지만 Visual Studio의 기본 템플릿은 외부에 있으므로 가장 일반적인 사용법이되었습니다.

자동 생성 파일이 네임 스페이스 안에 using 문을 배치하는 데는 좋은 이유가 있습니다. 참조가 해석되는 순서에 영향을줍니다. Columbus.Web.Data에서 사용되는 클래스와 이름을 공유하는 MyCoolProject.Web 네임 스페이스에 클래스를 정의한 경우 해당 클래스의 사용은 사용이 외부에 있으면 MyCoolProject.Web.Class로, Columbus.Web으로 확인됩니다. 사용법이 내부에 있다면 Data.Class. 따라서 using 문을 네임 스페이스 내에 유지하면 자동 생성 코드가 프로젝트에서 변경 한 사항에보다 강력 해집니다.

이것은 컴파일되지 않습니다 (MyCoolProject.Web.콘솔 클래스)를 WriteLine을 정의하지 않습니다

namespace MyCoolProject.Web.Services 
{ 
    using System; 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello there"); 
     } 
    } 
} 

namespace MyCoolProject.Web 
{ 
    public static class Console 
    { 

    } 
} 
0

나는 이것이 근본적인 이유의 많은 모르겠어요,하지만 조심, 적어도에서 .NET 3.5, 거기에이 것 반면

using System;  
namespace MyCoolProject.Web.Services 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello there"); 
     } 
    } 
} 

namespace MyCoolProject.Web 
{ 
    public static class Console 
    { 

    } 
} 

DataContext의 부분 클래스에서 네임 스페이스 블록 외부에서 using 블록을 선언 할 때 Linq가 SQL을 작동시키지 못하게하는 버그.

+0

좋아, 그건 완전히 오프 주제지만, 그저 옥상에서 경고를 외치고 싶다. 너무 피의 짜증나. –