Недавно я высказал свое мнение об этом в другом месте *, но я думаю, что он заслуживает дальнейшего анализа, поэтому я публикую это как свой собственный вопрос.Должен ли я использовать интерфейс типа IEnumerable или конкретный класс, например List <>
Предположим, что мне нужно создать и передать контейнер в моей программе. У меня, вероятно, нет сильного мнения об одном виде контейнера по сравнению с другим, по крайней мере на данном этапе, но я выбираю один; для аргументации, допустим, я собираюсь использовать список <>.
Вопрос заключается в том: ли лучше писать свои методы, чтобы принимать и возвращать высокий интерфейс уровня, таких как С # IEnumerable? Или я должен писать методы для принятия и передачи определенного класса контейнера, который я выбрал.
Какие факторы и критерии я должен искать? Какие программы работают от одного или другого? Влияет ли компьютерный язык на ваше решение? Представление? Размер программы? Личный стиль?
(Есть ли еще вопрос?)
** (Домашнее задание:.. Найти Но пожалуйста, напишите свой ответ здесь, прежде чем искать самостоятельно, так как не предвзятость вас) *
Согласен, но я как раз собирался задать почти тот же вопрос, потому что мой код неловко использует IEnumerable; вместо списка foos = fooQuery.GetFoos(), он становится списком foos = new Список (fooQuery.GetFoos()). Я что-то упускаю? Или это цена, которую мы платим за гибкость? –
si618
Пример с использованием приведенного выше комментария - это модульные тесты, в которых вы хотите проверить результаты, например. IList.Count, фактическое использование действительно не требует IList, и IEnumerable будет достаточно, но это просто неудобно ... – si618
@Si Я думаю, что мы говорим о разных вещах здесь. Этот вопрос касается только объема внутри метода; вы говорите о типах возврата и использовании вне метода. –