Я прочитал пару сообщений в блоге, в которых упоминалось, что для общедоступных API мы всегда должны возвращать ICollection (или IEnumerable) вместо List. В чем реальное преимущество возврата ICollection вместо списка?
Спасибо!
Я прочитал пару сообщений в блоге, в которых упоминалось, что для общедоступных API мы всегда должны возвращать ICollection (или IEnumerable) вместо List. В чем реальное преимущество возврата ICollection вместо списка?
Спасибо!
Перечислитель возвращает только одну сущность за раз, когда вы перебираете ее. Это потому, что он использует доходность. Коллекция, с другой стороны, возвращает весь список, требуя, чтобы список был полностью сохранен в памяти.
Короткий ответ: счетчики легче и эффективнее.
Это дает вам больше свободы при выборе базовой структуры данных.
Список предполагает, что реализация поддерживает индексацию, но ICollection не делает такого предположения.
Это означает, что если вы обнаружите, что Set может обеспечить лучшую производительность, поскольку порядок не имеет значения, вы можете изменить свой подход, не затрагивая клиентов.
Это базовая инкапсуляция.
Я бы подумал, что IList будет более подходящим, но ...
ICollection - это просто интерфейс, а List - это конкретная реализация этого интерфейса. Что, если вы захотите позже использовать какой-нибудь другой контейнер помимо списка? Если вы публично раскрываете интерфейс ICollection, вы можете позже изменить свой внутренний контейнер на что-то другое - при условии, что новый контейнер также реализует интерфейс ICollection.