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