Как разработчик инфраструктуры плагинов, я хочу указать интерфейс myNameSpace.IPlugin, который должны реализовывать плагины. Возвращаемое значение одного из членов интерфейса, IPlugin.GetWidget (), должно иметь тип, производный от System.Windows.Forms.Control, и оно также должно реализовывать интерфейс myNameSpace.IFoo. Я также хочу позволить разработчикам плагинов возвращать сторонние элементы управления (которые уже являются потомками System.Windows.Forms.Control) из IPlugin.GetWidget (). Каков наилучший способ однозначно указать это требование, кроме документирования, конечно :) и обеспечить его соблюдение? Как разработчик плагинов сможет определить плагин (используя сторонний элемент управления) для удовлетворения этих требований?