Есть еще одно соображение, которое, я думаю, не было учтено в других ответах.
Если вы извлекаете IWidgetX из ICommon, а затем получаете виджет с поведением как IWidget1, так и IWidget2, вы можете реализовать несколько интерфейсов:
class Widget3 : IWidget1, IWidget2
Если оба интерфейса были получены из ICommon, то в вашем классе будут две реализации ICommon. Это не большая проблема, и ее можно решить с помощью реализации нескольких интерфейсов , но это меняет логику.
С другой стороны, если вы не наследуете IWidgetX от ICommon, вы можете просто реализовать все три и не иметь дело с явной реализацией:
class Widget3 : IWidget1, IWidget2, ICommon
Итак, если возможно, что вам может понадобиться такой класс Widget3 - вам лучше не получать интерфейсы IWidgetX от ICommon