2012-02-07 1 views
4

다음 예제에서 어느 것이 가장 적합합니까? 보시다시피 목록 컬렉션 만 사용하고 다른 것은 네임 스페이스에서 사용하고 있습니다. Example1이 실행될 때 네임 스페이스 system.collections.generic 아래의 모든 클래스가 메모리에로드되었거나 무엇입니까? 두 예제 모두 어떻게 작동합니까?C#에서 이름 공간 사용

Example1: 

using System.Collections.Generic; 
public interface ICustomer 
{ 
    List<Customer> GetAll(); 
} 


Example2: 

public interface ICustomer 
{ 
    System.Collections.Generic.List<Customer> GetAll(); 
} 

답변

0

두 예제 모두 정확히 동일하게 작동합니다 (둘 다 중간 코드로 컴파일됨을 기억하십시오). 나는 1을 선호하지만 그것은 명확성과 관련이 있으며 행동 방식과는 관련이 없습니다.

1

이들은 동일합니다. 이 것

using Generic = System.Collections.Generic; 
public interface ICustomer 
{ 
    Generic.List<Customer> GetAll(); 
} 
+1

제 생각에는 이름 충돌이 있고 그 중 하나에 대한 전체 네임 스페이스를 쓰지 않으려는 경우입니다. 그것 이외의 코드를 clutters하고 더 열심히 읽을 수 있습니다. –

+0

실제로 Generic은 System.Collections.Generic을 의미합니다. 이걸 보면 Generic.List가 .net 라이브러리보다 맞춤형을 의미한다고 생각합니다. – RvdK

+0

그냥 왜 대답에 downvote있어 궁금! 거기에 문제가 있으면 알려주세요. 나는 대답을 지울 것입니다! – fardjad

0

유일한 차이점은 인텔리 함께 : 그것은 주로 인텔리 성능

또한 이름 충돌의 경우에 당신이 할 수있는 영향을주기 때문에 당신은 using 문에 대해 걱정하지한다. 파일에 using 문을 더 추가하면 Intellisense에서 색인을 생성하고 표시해야하는 항목을 더 많이 추가 할 수 있습니다. Intellisense가 수행하는 추가 작업의 가치가있는 예제 2의 가독성의 이점을 발견했습니다.

이 외에도 두 예제 모두 동일한 방법으로 CIL로 컴파일되며 성능에 전혀 영향을 미치지 않습니다.

+0

그리고 증가 된 작업은 그리 많지 않다. 내 netbook도 Intellisense에는 문제가 없습니다. –

0

AFAIK 중 하나를 사용하면 실제 이점이 없습니다. 두 번째 코드는 좀 더 자세한 정보이며 코드를 통해 읽기가 어려울 수 있습니다. 인터페이스/클래스에서 List 유형을 여러 번 참조해야하는 경우 관련성이 적은 네임 스페이스를 포함시켜 좀 더 자세하게 작성하는 것이 좋습니다.

예를 들어, 이것은 예를 들어 herehere과 같이 이전에 몇 번 논의되었습니다.

0

사용법에 따라 다릅니다. 동일한 이름을 가진 많은 수업이있는 경우 (예 : List라고하는 다른 클래스를 사용하면 두 번째 접근 방법이 더 좋습니다 (명확하게).

그렇지 않으면 접근 방법 1을 사용하여 더 깨끗한 & 형식 코드를 사용하는 것을 선호합니다. 당신은 당신이 다른 함수에서 또 하나의 목록을 작성해야합니다 생각한다면

0

- 당신은 예 1을 사용할 수 있겠지만, 문제는이 목록의 유일한 인스턴스 인 경우

하지만

는 - 그것은 EX1 또는 경우 정말 중요하지 않습니다 Ex2.

(그냥 주문 - 나는 EX1에 사용하도록 제공하는 것)

단지입니다 -로드 무엇 ... 모든 라이브러리를로드하지 - - 당신이 Using를 사용할 때, 아니

을 그리고 예를 들어 List으로 전화하십시오.

행운을 비네!

1

네임 스페이스를 가져 오는 using 문은 컴파일러에만 필요합니다. 바로 가기이므로 사용중인 유형을 완전히 한정 할 필요가 없습니다.

나는 네임 스페이스에서 하나의 유형 만 사용하는 경우에도 모든 네임 스페이스를 가져 오는 것이 좋습니다. 불필요한 네임 스페이스를 제거하려면 Visual Studio의 함수를 사용하여 네임 스페이스를 구성 할 수 있습니다.

5

첫 번째 경우는 수업 시작에 무엇을 사용 하시겠습니까? (커플 링은입니다). 그래서 그들에게 당신을 선언하지 않고

  • 수 있도록 인텔리 (자동 완성)
  • 은 확장 메서드 (예 : Linq를 확장 방법)

을 활성화 : 선언은, 다른 용도 사이에 당신의 IDE 및 컴파일러에 의해 사용됩니다 이 기능이 느슨해집니다. 이 용도는 선호됩니다. 코드 가독성도 향상됩니다. Visual Studio에서는 사용 환경을 깨끗하게 유지할 것을 강력하게 권장하지 않더라도 (예 : Java 기반 환경과 같은 경고 표시 등) 컨텍스트 메뉴에서 "사용하지 않은 가져 오기 제거"를 항상 수행하는 것이 더 좋습니다 클래스 파일에.

두 번째 경우에는 정규화 된 이름으로 명시 적으로 참조하는 유형을 사용할 수 있습니다. 이 경우에는 이름이 충돌하는 상황에서 일반적으로 만 사용됩니다.

결국 바이너리 컴파일 된 코드는 컴파일러가 최적화하기 때문에 동일하지만, 첫 번째 방법을 사용하면 컴파일 프로세스 자체가 더 효율적일 수 있습니다.

+0

+1 확장 방법 기억하기 –