В чем реальное преимущество возврата ICollection ‹T› вместо List ‹T›?

Я прочитал пару сообщений в блоге, в которых упоминалось, что для общедоступных API мы всегда должны возвращать ICollection (или IEnumerable) вместо List. В чем реальное преимущество возврата ICollection вместо списка?

Спасибо!

Дубликат: В чем разница между List (of Т) и Сбор (из Т)?


person Martin    schedule 08.01.2009    source источник
comment
Ответили здесь: stackoverflow.com/questions/271710/   -  person Click Ok    schedule 09.01.2009


Ответы (5)


Перечислитель возвращает только одну сущность за раз, когда вы перебираете ее. Это потому, что он использует доходность. Коллекция, с другой стороны, возвращает весь список, требуя, чтобы список был полностью сохранен в памяти.

Короткий ответ: счетчики легче и эффективнее.

person Soviut    schedule 08.01.2009
comment
Хм?! Я думаю, он имеет в виду, как установить возвращаемый тип, а не фактический объект, который нужно вернуть. Это вопрос контракта интерфейса класса. - person mmx; 09.01.2009
comment
Он спрашивал, в чем преимущество возврата счетчика по сравнению со списком, а не в том, как это сделать. - person Soviut; 09.01.2009

Это дает вам больше свободы при выборе базовой структуры данных.

Список предполагает, что реализация поддерживает индексацию, но ICollection не делает такого предположения.

Это означает, что если вы обнаружите, что Set может обеспечить лучшую производительность, поскольку порядок не имеет значения, вы можете изменить свой подход, не затрагивая клиентов.

Это базовая инкапсуляция.

person Allain Lalonde    schedule 08.01.2009

Я бы подумал, что IList будет более подходящим, но ...

person Powerlord    schedule 08.01.2009

ICollection - это просто интерфейс, а List - это конкретная реализация этого интерфейса. Что, если вы захотите позже использовать какой-нибудь другой контейнер помимо списка? Если вы публично раскрываете интерфейс ICollection, вы можете позже изменить свой внутренний контейнер на что-то другое - при условии, что новый контейнер также реализует интерфейс ICollection.

person ccoxtn    schedule 08.01.2009