2009-01-08 18 views
14

Tôi đã đọc một vài bài đăng trên blog đề cập rằng đối với API công khai, chúng tôi luôn phải trả lại ICollection (hoặc IEnumerable) thay vì Danh sách. Lợi thế thực sự của việc trả lại ICollection thay vì một Danh sách là gì?Lợi thế thực sự của việc trả lại ICollection <T> thay vì Danh sách <T> là gì?

Cảm ơn!

trùng lặp: What is the difference between List (of T) and Collection(of T)?

+0

Replyed đây: http://stackoverflow.com/questions/271710/collectiont-versus-listt-what-should -bạn sử dụng-trên-giao diện của bạn –

Trả lời

2

Một điều tra viên chỉ trả về một thực thể tại một thời điểm khi bạn lặp trên nó. Điều này là do nó sử dụng lợi nhuận lợi nhuận. Một bộ sưu tập, mặt khác, trả về toàn bộ danh sách, yêu cầu danh sách đó phải được lưu trữ hoàn toàn trong bộ nhớ.

Câu trả lời ngắn gọn là các điều tra viên nhẹ hơn và hiệu quả hơn.

+0

Huh ?! Tôi nghĩ rằng anh ta có nghĩa là làm thế nào để thiết lập kiểu trả về, không phải là đối tượng thực sự để trả về. Đó là vấn đề của hợp đồng giao diện lớp. –

+0

Ông đã hỏi những gì lợi thế để trở về một điều tra so với một danh sách đã được, không phải làm thế nào để. – Soviut

0

ICollection chỉ là một giao diện, trong khi Danh sách là một triển khai cụ thể của giao diện đó. Điều gì xảy ra nếu bạn muốn sử dụng một số container khác bên cạnh một danh sách? Nếu bạn công khai hiển thị giao diện ICollection, bạn có thể thay đổi vùng chứa bên trong của mình thành một thứ khác sau này - miễn là vùng chứa mới cũng triển khai giao diện ICollection.

2

Nó mang lại cho bạn sự tự do hơn khi chọn cấu trúc dữ liệu Underlying.

Danh sách giả định rằng triển khai hỗ trợ lập chỉ mục, nhưng ICollection không đưa ra giả định như vậy. Điều này có nghĩa là nếu bạn phát hiện ra rằng Bộ có thể cung cấp hiệu suất tốt hơn vì đặt hàng không liên quan, bạn có thể tự do thay đổi cách tiếp cận mà không ảnh hưởng đến khách hàng.

Đó là đóng gói cơ bản.

1

Tôi sẽ nghĩ IList sẽ thích hợp hơn, nhưng ...

Các vấn đề liên quan