Да, в данном случае это не имеет никакого значения. В некоторых случаях это может иметь значение, если вы используете базовый класс, который уже реализует интерфейс, но вы хотите явно его переопределить - но в этом случае нет базового класса (кроме неявного object
), и он будет вести себя точно так же.
Вопреки моим воспоминаниям, я не верю, что существует разница в том, как класс представлен в метаданных независимо от того, явно ли он объявляет все интерфейсы или нет. Вот пример:
interface IFoo {}
interface IBar : IFoo {}
class FooBar1 : IBar {}
class FooBar2 : IBar, IFoo {}
Оба ILDASM и рефлектор показывает ту же информацию для FooBar1
и FooBar2
... он показывает оба реализации IBar
и IFoo
.
Другими словами, мы не можем определить, действительно ли исходный код для List<T>
указывает все интерфейсы или нет. Может быть, так оно и есть, может быть, нет, но это не имеет значения.
EDIT: Для полноты я также проверил случаи, когда вы расширяете два интерфейса с другим интерфейсом. В этом случае я не могу найти разницу в метаданных. Я уверен, что я помню некоторую ситуацию, в которой это было очевидно, но я не могу найти его сейчас.
Так как базового класса нет. Это не имеет значения. Тогда почему разработчики унаследовали эти два интерфейса «снова»? –
@Marco: См. Мой отредактированный ответ. –
Получил это. Большое спасибо. Это было быстро. –