Второй вариант более гибкий. Вводя новый интерфейс, вы заставляете классы реализовывать третий интерфейс, что будет возможно только в том случае, если у них есть ссылка на вашу библиотеку (где интерфейс определен).
При использовании общих ограничений классу нужна только ссылка на библиотеку, содержащую IFoo
и IBar
, но не IFooBar
.
Первый упомянутый вами способ создания суперинтерфейса привлекает объектно-ориентированный код, потому что он позволяет выразить класс как объединенные интерфейсы и взаимодействовать с ним как таковым.
Поскольку существует необходимость в таком выражении, почему бы не сделать его официальным и связать себя узами брака , сделав его суперинтерфейсом и задокументировав его для возможного будущего обслуживания. ИМХО