C# - Почему мы можем наследовать интерфейс дважды? - PullRequest
1 голос
/ 01 мая 2020

Обе эти C# версии кода компилируются и, кажется, делают одно и то же:

Версия A

class Foo : ICollection<string>
{...}

Версия B

class Foo : ICollection<string>, IEnumerable<string>
{...}

Интерфейс ICollection наследуется от IEnumerable, поэтому foo считается IEnumerable в любом случае.

В чем разница между двумя версиями и какой я должен использовать?

1 Ответ

3 голосов
/ 01 мая 2020

«Версия A» и «Версия B» функционально эквивалентны / идентичны и будут скомпилированы в один и тот же код.

Вы можете выбрать «Версия B» только в том случае, если есть вероятность того, что в будущем 2 применяемых интерфейса не будут иметь структуру наследования (в этом случае ICollection<T> больше не будет расширяться IEnumerable<T>) , Этого не произойдет с этими двумя типами интерфейса, но это может произойти с вашими собственными типами, которые вы определяете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...