Một mảnh tốt lời khuyên mà tôi đã thường được nghe trích dẫn là:
Hãy tự do trong những gì bạn chấp nhận, chính xác những gì bạn cung cấp.
Về mặt thiết kế API của bạn, tôi khuyên bạn nên trả lại Giao diện chứ không phải là loại cụ thể.
Lấy phương pháp ví dụ của bạn, tôi muốn viết lại nó như sau:
public IList<object> Foo()
{
List<object> retList = new List<object>();
// Blah, blah, [snip]
return retList;
}
Điều quan trọng là sự lựa chọn thực hiện nội bộ của bạn - sử dụng một danh sách - không được tiết lộ cho người gọi, nhưng bạn trả lại một giao diện thích hợp.
Nguyên tắc riêng của Microsoft về phát triển khuôn khổ đề xuất chống lại các loại cụ thể, giao diện ưu tiên. (Xin lỗi, tôi không thể tìm thấy liên kết cho điều này)
Tương tự, thông số của bạn phải càng chung càng tốt - thay vì chấp nhận một mảng, chấp nhận một loại IEnumerable thích hợp. Điều này tương thích với mảng cũng như danh sách và các loại hữu ích khác.
Lấy phương pháp dụ của bạn một lần nữa:
public IList<object> Foo(IEnumerable<object> bar)
{
List<object> retList = new List<object>();
// Blah, blah, [snip]
return retList;
}
(câu trả lời sáp nhập từ bản sao gần đây) –