我不明白为什么我不能在另一个定义中使用特定的泛型类型。
所以我有这个:
public abstract class MdiWorkspaceController<TWorkItemController, TMdiWorkspaceView, TWorkItemViewFrame, TWorkItemMainView>
: ViewableWorkspaceController<TWorkItemController>
where TMdiWorkspaceView : class, IMdiWorkspaceView<TWorkItemViewFrame, TWorkItemMainView, TWorkItemMainView>
where TWorkItemViewFrame : class, IWorkItemViewFrame<TWorkItemMainView>
where TWorkItemMainView : class, IWorkItemMainView
where TWorkItemController : ViewableWorkItemController{}
我正在尝试使用
public partial class TabbedWorkspaceView<TWorkItemMainView>
: KryptonNavigator,
IMdiWorkspaceView<TabbedWorkItemViewFrame<TWorkItemMainView>, TWorkItemMainView, TWorkItemMainView>
where TWorkItemMainView : AbstractWorkItemView
作为更具体的实现 TabbedWorkspaceController 中的 TTabbedWorkspaceView,如下所示:
public class TabbedWorkspaceController<TWorkItemController, TTabbedWorkspaceView, TTabbedWorkItemViewFrame, TWorkItemMainView>
: MdiWorkspaceController<TWorkItemController, TTabbedWorkspaceView, TTabbedWorkItemViewFrame, TWorkItemMainView>
where TWorkItemController : ViewableWorkItemController
where TTabbedWorkspaceView : TabbedWorkspaceView<TWorkItemMainView>
where TTabbedWorkItemViewFrame : TabbedWorkItemViewFrame<TWorkItemMainView>
where TWorkItemMainView : AbstractWorkItemView
但我收到一条错误消息,说 TTabbedWorkspaceView 必须可转换为
IMdiWorkspaceView<TTabbedWorkItemViewFrame<TWorkItemMainView>, TWorkItemMainView, TWorkItemMainView>
为了将其用作泛型类中的参数 TMdiWorkspaceView
MdiWorkspaceController<TWorkItemController, TTabbedWorkspaceView, TTabbedWorkItemViewFrame, TWorkItemMainView>
现在我很高兴地承认我处于“聪明”代码的个人边界,但在此之后,一切都在应用程序级别变得完全具体和简化,所以我想继续使用我的设计。
更新:
好的,感谢大家的帮助,我已经解决了这个问题,我需要让泛型类型流向 TabbedWorkspaceView,而不是我声明了它。所以新版本是:
public partial class TabbedWorkspaceView<TTabbedWorkItemViewFrame, TWorkItemMainView>
: KryptonNavigator,
IMdiWorkspaceView<TTabbedWorkItemViewFrame, TWorkItemMainView, TWorkItemMainView>
where TTabbedWorkItemViewFrame : TabbedWorkItemViewFrame<TWorkItemMainView>
where TWorkItemMainView : AbstractWorkItemView
接着:
public class TabbedWorkspaceController<TWorkItemController, TTabbedWorkspaceView, TTabbedWorkItemViewFrame, TWorkItemMainView>
: MdiWorkspaceController<TWorkItemController, TTabbedWorkspaceView, TTabbedWorkItemViewFrame, TWorkItemMainView>
where TWorkItemController : ViewableWorkItemController
where TTabbedWorkspaceView : TabbedWorkspaceView<TTabbedWorkItemViewFrame, TWorkItemMainView>
where TTabbedWorkItemViewFrame : TabbedWorkItemViewFrame<TWorkItemMainView>
where TWorkItemMainView : AbstractWorkItemView
然后在应用程序级别我可以:
public class TappWorkspaceController
: TabbedWorkspaceController<TappWorkItemController, TappWorkspaceView, TappWorkItemViewFrame, TappWorkItemView>