Здравствуйте, dmitry_npi, Вы писали:
_>Я считаю, что это только запутывает код.
_>Вспомним букву I в SOLID: интерфейс — это аспект поведения. У компонента может быть много аспектов, но они должны быть разделены.
_>Кроме очевидных исключений типа
_>_>IEnumerable<T>: IEnumerable
_>
И чуть менее очевидные
ICollection : IEnumerable
IList : ICollection
Наследование интерфейсов с одной стороны необязательное, с другой стороны иногда упрощает код и понимание. Просто знаешь что если что-то реализует IList, то оно уже точно и перечислимо и коллекцией является, а не проверяешь каждый раз, что ThisSuperList реализует и IList и ICollection и IEnumerable.
Ну и банально — ты на вход принимаешь IList, и можешь напрямую использовать его и как IEnumerable, что логично.
С другой стороны, злоупотребление таким наследованием тоже не полезно.