C #에서 "사용 중"섹션을 깨끗하게 유지해야하는 이유는 무엇입니까?


11

코드를 리팩토링 할 때 IDE를 C # 클래스 의 using 섹션으로 이동하고 사용 하지 않는 네임 스페이스중복 네임 스페이스 를 정리하고 모두 정렬했습니다.

내 짝 (쌍 프로그래밍)이 이유를 물었다. 왜 그런 짓을했는지 몰랐습니다. 나는 모든 코드를 깨끗하고 깔끔하게 유지하는 습관을 잃었다. 필자는 그에게 깨끗한 코드를 사용하는 것이 일반적으로 좋은 생각이라고 말했지만 물론 C # 코드 페이지 의 사용 섹션 에서 시간을 낭비하지 않기 때문에 그 이유는 좋지 않습니다 .

여러 번 클래스 또는 열거 형 (또는 일반적인 유형)을 한 네임 스페이스에서 다른 네임 스페이스로 이동하면 코드에 새로운 using 문이 추가됩니다 (코드 창을 위로 이동하여 using 문을 직접 작성하여 수동으로 또는 Alt+ Ctrl+ F10조합을 사용하여 편집기를 통해 ))이 새로운 using 문section 의 끝에 추가 되므로 알파벳순으로 정렬되지 않으며 컴파일러가 이러한 문제에 대해 불평하지 않기 때문에 왜 우리는 이것을 만들어야합니까? 깨끗하고 깔끔한 섹션? 어떤 이유가있을 수 있습니까?


5
이것은 이미 요청 및 스택 오버플로에 대답하고있다 - stackoverflow.com/questions/4163320/unused-using-statements을 (측면 표시 줄에있는 두 개의 연결 질문) - 기본적으로 사용되지 않는 using이 걱정할 이유가 없다
ChrisF

@ChrisF의 훌륭한 참조, 나는 거기에 내 대답이 있다고 생각합니다. 어쩌면 그 질문에 참여하거나 비슷한 것을해야 할 수도 있습니다. :)
Saeed Neamati

이것도 확인하십시오 : stackoverflow.com/a/136646/333306

답변:


22

using지시어의 수에 관계없이 성능 차이는 없습니다 .

그러나 나는 두 가지 이유로 깨끗하게 유지하는 것이 합리적이라고 생각합니다.

  1. usings 를 보면 파일의 종속성을 확인할 수 있습니다. 이를 통해 파일의 유형이 무엇을 수행하는지 파악할 수 있습니다. 이렇게하면 using특정 순서대로 s를 사용하면 더 빨리 볼 수 있습니다.
  2. 당신이 너무 많은 경우 using들,이 는 우려의 가난한 분리를 가지고와 파일의 유형 (들) 너무 많은 일을 나타냅니다.

이 두 가지 모두 중요하지 않으므로 너무 걱정할 필요가 없습니다. 그러나 개인적으로, usings를 깨끗하게 유지하는 것이 가치가 있다고 생각합니다 .


8

using 문 사이에서 정리해야 할 주요 이유는 다음과 같습니다.

  • using 문이 많을수록 이름 지정 충돌 가능성이 높아 지므로 모호성을 피하기 위해 네임 스페이스의 일부를 코드에 포함시켜야합니다.
  • IntelliSense는 using 문의 모든 어셈블리를 기반으로 필터링됩니다. 따라서 불필요한 진술로 정리하면 IntelliSense의 정확성을 통해 도움을 얻을 수 있습니다.

게다가 나는 가독성을 높이고 클래스의 유형 (들)이 무엇을하는지 쉽게 알 수 있다는 점에서 다른 답변에 동의합니다.


왜 이것이 더 높은 투표를했는지 이해가되지 않습니다. 네임 스페이스 충돌은 합법적 인 문제입니다.
RubberDuck

7

"완벽한 추가 물이 남을 때가 아니라 제거 할 남은 것이 없을 때 완벽 함"– Antoine de Saint-Exupery

필요하지 않고 이해가되지 않는 것을 제거 할 수있을 때마다 제거하십시오 (가독성은 추가 코드 가치가 있습니다).


큰 격언. 나는 그 아이디어를 좋아했다. +1;)
Saeed Neamati 3:24에

4

신호에서 노이즈를 제거하는 것입니다. 잡음이 적다는 것은 신호 수신이 더 쉽다는 것을 의미합니다. 즉 코드의 의도를 이해합니다.

소음의 발생기로서 그것은 아주 사소한 것입니다.


2
  • 코드의 가독성을 향상시킵니다.
  • 일반적으로 사용 설명이 거의없는 경우이 지침을 따르는 것이 의미가 없습니다.

  • using 문을 섹션으로 구분하는 것이 더 합리적입니다.

예를 들면 다음과 같습니다.

    using System.Web;

    using MyPlatform.FooX;        
    using MyPlatform.FooY;

    using MyFramework.Helpers;        
    using MyFramework.Extentions;

클래스를 살펴보면 주어진 클래스가 System.Web 어셈블리와 플랫폼 및 프레임 워크를 사용하고 있음을 즉시 알 수 있습니다. 이것은 의존성과 복잡성에 대한 대략적인 아이디어를 제공합니다.

그런 다음이 단계를 더 진행하여 문을 정렬 할 수는 있지만 문을 사용하기가 쉽지 않다고 생각하므로 권장하지 않습니다.

using MyFramework.Extentions;
using MyFramework.Helpers;

using System.Web;

using MyPlatform.FooX;        
using MyPlatform.FooY;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.