Возможно ли в C # определить тип возвращаемого значения метода как некоторый класс, который дополнительно реализует некоторый интерфейс?
Например, в приложении GTK # я хотел бы иметь виджет для отображения документов. Я хотел бы предоставить несколько реализаций этого виджета - одну на основе Gecko, одну на Webkit и одну базовую на обычном Gtk.TextView. Ясно, что все эти классы должны наследоваться от Gtk.Widget (косвенно). Я бы объявил интерфейс, который реализовали бы все эти виджеты. Наконец, я хотел бы создать фабричный метод, который будет создавать соответствующий виджет, например, на основе. доступные библиотеки. Какой тип должен возвращать фабричный метод?
interface IDocumentView {...};
class GeckoDocumentView : Gecko.Webcontrol, IDocumentView {...};
class WebKitDocumentView : WebKit.WebView, IDocumentView {...};
class BasicDocumentView : Gtk.TextView, IDocumentView {...};
class DocumentViewFactory {
static IDocumentView CreateView () {...};
}
Какой должен быть тип возвращаемого метода DocumentViewFactory.CreateView? Если невозможно указать и Gtk.Widget, и IDocumentView, это должно быть:
- Gtk.Widget (базовый класс), который позже будет приведен к IDocumentView?
- IDocumentView (интерфейс), который позже будет приведен к Gtk.Widget?
РЕДАКТИРОВАТЬ - может ли интерфейс принудительно наследовать от определенного базового класса?