저는 C ++ 배경을 가지고 있으며이 질문에 대한 답변을 완전히 이해하고 동의합니다. 왜 "사용 네임 스페이스 표준"입니까? 나쁜 연습으로 간주?
따라서 C #에 대한 경험이 있으면 정확히 반대편이 보입니다
using Some.Namespace;. 문자 그대로 모든 곳에서 사용됩니다. 유형 사용을 시작할 때마다 네임 스페이스에 대해 using 지시문을 먼저 추가합니다 (아직없는 경우). 로 .cs시작하지 않은 파일 을 본 기억 이 없습니다 using System; using System.Collections.Generic; using X.Y.Z; etc.... 실제로 Visual Studio 마법사를 통해 새 파일을 추가하면 전혀 필요하지 않더라도 일부 지시문을 사용하여 자동으로 추가합니다. 따라서 C ++ 커뮤니티에서는 기본적으로 린치가 있지만 C # 은이 작업을 권장합니다. 적어도 이것이 나에게 나타나는 방식입니다.
이제 C #과 C ++에서 지시문을 사용하는 것이 정확히 같은 것은 아니라는 것을 알고 있습니다. 또한 using namespaceC ++에서 할 수있는 가장 오래된 것 중 하나 , 즉 헤더 파일에 넣는 것 중 하나는 헤더 파일 개념이 없기 때문에 C #에서 그다지 불쾌한 대응이 없다는 것을 이해합니다 #include.
그러나 차이점에도 불구하고 C # 및 C ++에서 지시문을 사용하면 동일한 목적을 달성 SomeType하므로 훨씬 더 길지 않고 항상 입력 해야합니다 Some.Namespace.SomeType(C ::대신 ++ 대신 .). 그리고 이와 같은 목적으로 충돌의 이름을 지정하는 것 또한 위험합니다.
가장 좋은 경우 컴파일 오류가 발생하므로이를 수정해야합니다. 최악의 경우에도 여전히 컴파일되고 코드는 의도 한 것과 다른 일을 자동으로 수행합니다. 그래서 내 질문은 : 왜 C #과 C ++에서 그렇게 부적절하게 간주되는 지시문을 사용하고 있습니까?
내가 가진 대답에 대한 몇 가지 아이디어 (이 중 어느 것도 실제로 나를 만족시키지 못합니다) :
네임 스페이스는 C ++ (
stdvsSystem.Collection.Generic) 보다 C #에서 훨씬 길고 중첩되는 경향이 있습니다 . 따라서 이런 식으로 코드의 노이즈를 줄이면 더 많은 욕구와 이득을 얻을 수 있습니다. 그러나 이것이 사실이더라도이 인수는 표준 네임 스페이스를 볼 때만 적용됩니다. 사용자 정의 이름은 C #과 C ++ 모두에서 원하는 짧은 이름을 가질 수 있습니다.네임 스페이스는 C ++보다 C #에서 훨씬 "미세한"것으로 보입니다. 예를 들어, C ++에서 전체 표준 라이브러리에 포함되어 있습니다
std(더하기 몇 가지 작은 중첩 된 네임 스페이스 같은chronoC #에서 당신이 가지고있는 동안)System.IO,System.Threading,System.Text등 그래서, 이름 충돌을 가질 위험이 작다. 그러나 이것은 단지 직감입니다. 실제로using namespace stdand로 가져 오는 이름의 수는 세지 않았습니다using System. 다시 말하지만, 이것이 사실 일지라도이 인수는 표준 네임 스페이스를 볼 때만 적용됩니다. C #과 C ++ 모두에서 원하는대로 세밀하게 디자인 할 수 있습니다.
더 많은 논쟁이 있습니까? 나는 실제로 어려운 사실 (있는 경우)에 관심이 많고 의견이 많지 않습니다.
Ext(this T t, long l)통해 호출 하는 것을 고려하십시오 t.Ext(0). 그런 다음 확장 메소드가 포함 된 다른 네임 스페이스를 추가하면 해당 네임 스페이스가 Ext(this T t, int i)대신 호출됩니다. 그러나 나는 C # (아직)의 전문가가 아닙니다.