왜"using System;"지 않은 나쁜 것으로 간주 연습을?

I have a C++배경과 내가 완벽하게 이해하고 동의 답은 이 질문:이유는"네임스페이스을 사용하여 std;"나쁜 것으로 간주 연습을?

그래서 나는'm 놀라게하는 데 약간의 경험으로 C#지금,나는 정 반대로 거기: 를 사용하여 일부.네임스페이스는 말 그대로 모든 곳에서 사용된다. 시작할 때마다 형식을 사용하여 추가 사용하는 지시어에 대한 그것의 네임스페이스(첫 아니면 그것이't 가 이미). 나를 기억할 수 없습을 볼 수 있는.cs파일로 저't 을 시작으로using System;using System.컬렉션이 있습니다.일반 사 X.Y.Z;등.... 사실,새로 추가하는 경우 통해 파일을 Visual Studio 마법사를,그것은 자동으로 추가 사용하는 지시어가하지 않더라도 당신은 필요합니다. 그래서에서는 C++커뮤니티를 얻을 기본적으로 린치,C#도 장려하는 것입니다. 적어도 이것은 어떻게 그것을 나에게 나타납니다.

지금,내가 이해하는 지시어를 사용하여 C#에서는 C++정확히 동일하지 않은 것입니다. 또한 내가 이해하는 하나의 힘겨움을 할 수 있는 것은사용하는 네임스페이스에서는 C++,즉 그것이 헤더 파일에는 없이 동등하게 불쾌한 대응 C#에서의 부족으로 인해 개념의 헤더 파일 및#include.

그러나,그들의 차이에도 불구하고,사용하는 지시어에서 C#,C++같은 목적을 제공하는 것만 하는 형식의SomeType모든 시간,오히려 보다는 더 이상니다.네임스페이스가 있습니다.SomeType(C++에서는::대신.). 과 이와 동일한 목적,또한 위험이 나타납을 동일하게 이름 충돌 사고로 이어질 수 있습니다.

에서 최고의 경우 그 결과에서는 컴파일러,그래서 당신이"단"문제를 해결해야합니다. 최악의 경우에,그것은 아직도 컴파일하고 코드를 자동으로 다른 것보다 당신이 의도 한 것입니다. 그래서 제 질문은:이유는 분명()를 사용하는 지시어 고려되도록 불평등에 나쁜 C#,C++?

의 몇 가지 아이디어를 응답하는 내가(이들의 아무도 정말 나를 만족하지만,):

-네임스페이스 하는 경향이 훨씬 더 길고 훨씬 더 중첩에서는 C#보다에서는 C++(stdvs.시스템이다.컬렉션입니다.일반적인). 그래서 더 많은 욕망과 더 많은 이득에서 잡음 제거한 코드 이 방법입니다. 하지만 이것이 진실한 경우,이 인수할 때만 적용됩니다 우리는 네임스페이스 표준. 사용자정의할 수 있는 모든 짧은 당신은 당신이 좋아하는 이름,C#,C++.

-네임스페이스 나타나는 것은 훨씬 더"정밀한 세분화"C#에서는 C++에서보다. 예를 들어,C++에서 전체 표준 라이브러리에 포함된std(플러스 일부 작은 중첩된 네임스페이스같은 크로노)동안 C#에서 당신은시스템이다.IO,시스템이다.스레딩,시스템이다.텍스트등등. 그래서,위험의 명칭 충돌이 작습니다. 그러나,이것은 느낌. 지 않았't 이 실제로 얼마나 많은 이름"import"와사용하는 네임스페이스 std사용하는 시스템. 그리고 다시는 경우에도,이것은 사실,이 인수 될 때에만 적용에서 찾고있는 네임스페이스 표준. 자신의 사람을 설계할 수 있습으로 세분화된 당신이 원하는대로 모두에서,C#,C++.

거기에 더 많은 arguments? 나는'm 에 특히 관심이 있는 실제 하드 사실을(있다면)그리고 그렇게 많이 있다.

질문에 대한 의견 (31)
해결책

이유는"시스템을 사용하여;"지 않은 나쁜 것으로 간주 연습을?

"using System;"not보편적으로 고려하지 않은 나쁜습니다. 예를 들어,참조:왜 당신이 사용하지'사용하는'directive C#?

하지만 그것은 사실이 될 수 있습니다하지 않은 것으로 간주주나쁜로 사용하는 네임스페이스 std`. 아마 때문에:

  1. C#없는 헤더 파일이 있습니다. 그것은 흔히"include"중 하나는 C#소스 파일에 다른 사용하여 사전 프로세서입니다.

2.std네임스페이스입니다 거의 평면 즉 거의 모든 표준 라이브러리 함수,유형과 변수가 그것에(있는 몇 가지 예외과 같이 파일시스템의 하위 네임스페이스). 그것은 포함하는 매우,매우 높은 수의 식별자가 있습니다. 나의 이해,`시스템이 포함되어 훨씬 적은 이름으로 더 하위 네임스페이스입니다.

  1. C#있는 글로벌 기능 또는 변수입니다. 이와 같이 수의 글로벌한 식별자는 일반적으로 아주 작은 C++과 대조가 이러:게다가,그것은 일반적인 사용하는 C 라이브러리(자주 간접적으로)지 않는't 는 네임스페이스,따라서 모든 자신의 이름으로 글로벌 네임스페이스가 있습니다.

  2. 내가 알기로는,C#가 없 인수에 따라 조회입니다. ADL 과 함께 이 숨기기 과부하,etc. 생산할 수 있는 경우에는 일부 프로그램에 의해 영향을 받지 않는 이름의 충돌하는 동안,다른 사람은 미묘하게 영향을 받는 모든 모퉁이의 경우 가능하지 않으로 테스트합니다.

이러한 차이점 때문에,"시스템을 사용하여;"가 낮은 기회의 이름 분쟁보다는네임스페이스을 사용하여 std.


또한,네임스페이스"가져오"는 방법에는 자체 영속시키고 컨벤션:그것은 기존의를 가져오는 네임스페이스 표준,그럼 프로그래머 전통적으로시험피하기 이름을 선택에서는 네임스페이스에 대한 자신의 식별자,을 줄이는 데 도움이 되는 문제는 그러한 협.

는 경우 그러한 수입으로 간주 나쁜 연습,그럼 프로그래머가 될 가능성이 적어도 그러한 회의 충돌로 수입된 네임스페이스입니다. 이와 같은 규칙을 얻을하는 경향이 편광 중 하나 또는 반대의 연습 경우에도,의 무게를 인수 사이의 선택은 원래 미묘했다.

해설 (6)

그러나,그들의 차이에도 불구하고,사용하는 지시어에서 C#,C++동일한 목적으로만 입력하 SomeType 모든 시간,오히려 보다 훨씬 더 이상 일부입니다.네임스페이스가 있습니다.SomeType(C++으::는 대신.). 과 이와 동일한 목적,또한 위험이 나타납 theto 저:이름 충돌 사고로 이어질 수 있습니다.

네,하지만 당신이'texport 는 위험(예:다른 사람을 강제로 그것을 다루)기 때문에,의:

지금,내가 이해하는 지시어를 사용하여 C#에서는 C++정확히 동일하지 않은 것입니다. 또한 내가 이해하는 하나의 가장 더러운 것들을 함께 할 수 있는 네임스페이스을 사용하여 C++,즉 그것이 헤더 파일에 해당하는 기능이 없습니다 C#에서의 부족으로 인해 개념의 헤더 파일 및#포함합니다.

그래서 그's 는 오히려 다른 카테고리의 것입니다.

또한,C++지 않"설계되었"에서 개발되어야 IDE 같은 방법으로 C#입니다. C#은 기본적으로 항상에 기록 Visual Studio 를 가진 그것의 Intellisense 었습니다. It's 사용할 수 있도록 설계하는 방법으로,사람들에 의해 만들어집니다. 에 관계없이 얼마나 많은 사람들이 사용하 IDE 에서 개발하는 C++,그것은 설계와 함께 사용하는 경우로서 압도적인 관심사입니다.

네임스페이스 나타나는 것은 훨씬 더"정밀한 세분화"C#에서는 C++에서보다.

Yes,는 전세계적인 네트워크입니다.네임스페이스을 사용하여 std사용하는 시스템입니다.컬렉션입니다.일반적인는 비교할 수 있습니다.

그렇지 않't 를 비교한 그들!

해설 (5)