문제

반복 할 수있는 직원 목록을 반환하는 클래스 메서드가 있습니다.목록을 반환하는 가장 좋은 방법은 무엇입니까?일반적으로 ArrayList를 반환합니다.그러나 내가 이해했듯이 인터페이스는 이러한 유형의 작업에 더 적합합니다.사용하기에 가장 좋은 인터페이스는 무엇입니까?또한 구현 (예 : ArrayList 객체)보다 인터페이스를 반환하는 것이 더 좋은 이유는 무엇입니까?더 많은 작업이 필요한 것 같습니다.

도움이 되었습니까?

해결책

개인적으로는 목록 <직원>을 사용합니다.백엔드에 목록을 만든 다음 돌아올 때 IList 를 사용합니다..인터페이스를 사용할 때 코드를 사용하는 사람을 변경하지 않고도 구현을 변경할 수있는 유연성을 제공합니다.ArrayList를 계속 사용하려면 일반 IList .

다른 팁

@ Jason

배열이 실제로이 인터페이스를 구현하기 때문에 IList <>를 반환 할 수도 있습니다.

이런 작업을 수행하는 가장 좋은 방법은 말씀하신대로 목록을 반환하는 것입니다. 바람직하게는 제네릭을 사용하여 List<Employee>가됩니다.

ArrayList가 아닌 List를 반환한다는 것은 나중에 LinkedList를 사용하기로 결정한 경우 시작할 객체를 생성하는 위치 (예 : 호출"new ArrayList ())"에.

목록을 반복하는 것이 전부라면 목록을 IEnumerable (.NET 용)로 반환하는 메서드를 정의 할 수 있습니다.

필요한 기능 만 제공하는 인터페이스를 반환함으로써 향후 애플리케이션에 더 좋고 / 빠르며 / 더 잘 일치하는 새로운 컬렉션 유형이 제공되면 IEnumerable을 구현하는 한 완전히 다시 작성할 수 있습니다.메서드를 호출하는 코드를 변경하지 않고 내부에 새 유형을 사용합니다.

컬렉션을 주문해야하는 이유가 있습니까?단순히 IEnumerable<Employee>를 반환하지 않는 이유는 무엇입니까?이것은 필요한 최소한의 것을 제공합니다. 나중에 Bag, Set 또는 Tree와 같은 다른 형태의 스토리지를 원할 경우 계약은 그대로 유지됩니다.

인터페이스를 반환하는 것이 더 낫다는 전제에 동의하지 않습니다.내 이유는 주어진 코드 블록이 노출하는 유용성을 극대화하기를 원하기 때문입니다.

이를 염두에두고 인터페이스는 항목을 인수로 받아들이는 데 사용됩니다.함수 매개 변수가 배열 또는 ArrayList를 호출하는 경우 전달할 수있는 유일한 항목입니다.함수 매개 변수가 IEnumerable을 호출하면 둘 중 하나와 다른 여러 개체를 모두 허용합니다.더 유용합니다

반환 값은 반대로 작동합니다.IEnumerable을 반환 할 때 할 수있는 유일한 일은 열거하는 것입니다.List가 편리하고 반환되면 함수를 호출하는 코드도 카운트 가져 오기와 같은 여러 다른 작업을 쉽게 수행 할 수 있습니다.

나는 당신에게 ArrayList에서 벗어나라고 조언하는 사람들과 연합합니다.Generics가 훨씬 더 좋습니다.

인터페이스는 구현과 구현 사용자 간의 계약입니다.

인터페이스를 사용하면 사용자에 대한 계약을 유지하는 한 구현을 원하는만큼 변경할 수 있습니다.

또한 사용자가 인터페이스와 상호 작용하는 코드를 재사용 할 수 있도록 여러 구현에서 동일한 인터페이스를 사용할 수 있습니다.

당신은 당신이 말하는 언어를 말하지 않지만 .NETish에서 IList를 반환하는 것은 List 또는 ArrayList보다 더 이상 작업이 아닙니다..NET에 대해 말하는 것이 아닙니다.

인터페이스는 본질적으로 클래스가 특정 메소드 또는 속성을 갖는 계약입니다.직접 구현이 아닌 인터페이스에 프로그래밍하면 "계약"이 유지되는 한 구현을 완전히 교체 할 수 있으므로보다 동적이고 관리하기 쉬운 코드가 가능합니다.

당신이 설명하는 경우, 인터페이스를 전달하는 것은 특별한 이점을 제공하지 않습니다. 저라면 ArrayList를 제네릭 유형으로 전달하거나 Array 자체를 전달합니다. list.toArray ()

Actually you shouldn't return a List if thats a framework, at least not without thinking it, the recommended class to use is a Collection. The List class has some performance improvements at the cost of server extendability issues. It's in fact an FXCop rule.

You have the reasoning for that in this article

Return type for your method should be IList<Employee>.

That means that the caller of your method can use anything that IList offers but cannot use things specific to ArrayList. Then if you feel at some point that LinkedList or YourCustomSuperDuperList offers better performance or other advantages you can safely use it within your method and not screw callers of it.

That's roughly interfaces 101. ;-)

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