Прежде всего, мы должны исправить вашу терминологию:
IQueryable уже реализует IEnum.
IQueryable
ничего не реализует.Он наследует IEnum
, что означает, что каждый класс, который реализует IQueryable
, должен реализовывать члены IEnum
, а также элементы IQueryable
.
Я думаю, что ваш вопросна самом деле это так: почему DbSet
определяется как реализующий IEnum
, когда он реализует IQueryable
, поэтому ему все равно приходится реализовывать IEnum
.
Технически, заявив, что DbSet
реализует IEnum
,
Что оставляет вопрос: зачем кому-то излишне указывать базовый интерфейс?
Я процитирую эту статью в блоге Эрика Липперта: https://blogs.msdn.microsoft.com/ericlippert/2011/04/04/so-many-interfaces/
Возможно, потому что они считают, что это делает код более простым для понимания и более самодокументируемым.
Или, возможно, разработчик написал код как
interface I1 {}
интерфейс I2 {}
интерфейс I3: I1, I2 {}
и понял, о, подождите минуту, I2 должен наследовать от I1.Почему для этого редактирования требуется, чтобы разработчик вернулся и изменил объявление I3, чтобы оно не содержало явного упоминания I1?Я не вижу причин заставлять разработчиков удалять избыточную информацию.