문제

다시 말해, 사용하는 것이 정확합니까?

public class CustomerList : System.Collections.Generic.List<Customer>
{
    /// supposed to be empty
}

대신에:

using CustomerList = System.Collections.Generic.List<Customer>

고객리스트를 한 번만 정의하기 때문에 첫 번째 접근 방식을 사용하고 싶습니다. 고객 목록이 필요할 때마다 항상 같은 유형을 사용합니다. 반면에 이름 별명 접근 방식을 사용하여 모든 곳에서 재정의해야 할뿐만 아니라 누군가가 사용하기를 원할 때마다 (큰 팀을 생각할 때) 다른 별칭도 제공 할 수 있습니다. 덜 읽기 쉬워진다.

이 경우의 의도는 별명을 만들기 위해 클래스를 연장하는 것이 아닙니다.

도움이 되었습니까?

해결책

하지 마십시오. 사람들이 읽을 때 :

List<Customer> 

그들은 즉시 그것을 이해합니다. 그들이 읽을 때 :

CustomerList

그들은 가서 고객리스트가 무엇인지 알아 내야하므로 코드를 읽기가 더 어려워집니다. 코드베이스에서 작업하는 유일한 사람이 아니라면 읽기 쉬운 코드를 작성하는 것이 좋습니다.

다른 팁

기본 클래스에 기능을 추가하지 않으면 래퍼 객체를 만드는 데 아무런 의미가 없습니다. 당신이 정말로 필요하다면 2 번으로 갈 것입니다. 그러나 변수를 만들지 않는 이유는 무엇입니까?

List<Customer> customerList = new List<Customer>();

나는 동의 할 것이다 ~ 아니다 그런 식으로 별칭을 사용합니다. 팀의 어느 누구도 제시된 방식으로 별칭을 사용해서는 안됩니다. 별명이 제공 된 이유는 아닙니다. 또한 제네릭의 작동 방식에서 사용하는 장소 수에 관계없이 하나의 목록 클래스 만 있습니다.

단지 선언하고 사용하는 것 외에도 List<Customer>, 당신은 결국 그 목록을 다른 것에 전달하고 싶을 것입니다. 콘크리트를 통과하지 마십시오 List<Customer> 대신 통과합니다 IList<Customer> 또는 ICollection<Customer> 이를 통해 이러한 방법을보다 탄력적이고 프로그램에 쉽게 프로그램 할 수 있습니다.

앞으로 언젠가 고객리스트 컬렉션 클래스가 필요한 경우 구현할 수 있습니다. ICollection<Customer> 또는 IList<Customer> 그것에 그것들을 바꾸거나 더 잘 알지 못하고 그 방법으로 계속 전달하십시오.

실제로 당신은 어느 쪽도 사용해서는 안됩니다. 그만큼 프레임 워크 설계 지침에 따른 올바른 접근 방식은 System.Collections.ObjectModel.Collection에서 사용하거나 상속하는 것입니다.u003CT> 공공 API (목록u003CT> 내부 구현에만 사용해야합니다).

그러나 명명의 특정 문제와 관련하여 컬렉션에 기능을 추가 할 필요가없는 한, 별명없이 일반 유형 이름을 직접 사용하는 것으로 보입니다.

컬렉션을 반환하십시오u003CT> 객체 모델에서 표준 일반 바닐라 수집 API를 제공합니다.

컬렉션의 서브 클래스를 반환하십시오u003CT> 객체 모델에서 높은 수준의 수집 API를 제공합니다.

상속을 사용하여 별칭/typedefing을 수행하면 관련 생성자를 재정의 해야하는 문제가 있습니다.

어디에서나 그렇게하는 것이 빠르게 불합리하게되기 때문에 일관성을 위해 피하는 것이 가장 좋습니다.

이것은 '그것이 의존하는'질문 중 하나입니다.

필요한 것이 다른 요구 사항 외에 고객 목록으로 작동하는 새로운 클래스라면 상속이 방법입니다.

고객 목록을 사용하려면 변수를 사용하십시오.

타이핑을 저장하려는 경우 후자를 사용하십시오. 당신은 그런 식으로 기괴한 상속 문제를 해결하지 못할 것입니다.

실제로 논리적으로 뚜렷한 컬렉션 유형을 노출하려면 전자를 사용하십시오. 다시 돌아가서 물건을 추가 할 수 있습니다.

개인적으로, 나는 그냥 사용할 것입니다 List<Customer> 그리고 그것을 하루라고 부릅니다.

나는 본질적으로 Ed에 동의합니다. 실제로 일반 목록 구성의 기능을 확장 할 필요가 없다면 일반 목록 만 사용하십시오.

List<Customer> customerList = new List<Customer>();

기능을 확장 해야하는 경우 일반적으로 상속을보고 있습니다.

세 번째 가능성은 일반 목록 구성에서 기능을 크게 변경 해야하는 경우,이 경우 Ienumerable에서 간단히 상속받을 수 있습니다. 그렇게하면 열거 가능한 작업 (예 : "Foreach")에서 클래스를 사용할 수 있지만 모든 클래스 동작을 완전히 정의 할 수 있습니다.

하나의 프로그래머가 타이핑에 대한 저축을 저축하는 것은 다음 프로그래머의 유지 보수 악몽 일 수 있습니다. 여기 많은 사람들이 말했듯이 제네릭을 올바르게 입력 할 것입니다. 그것은 더 깨끗하고 코드의 의도에 대한보다 정확한 설명이며 유지 보수 프로그래머에게 도움이 될 것입니다. (누가 당신일지도 모르고 6 개월, 4 개의 새로운 프로젝트가 길을 따라갔습니다!)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top