特定のジェネリック型を別のジェネリック型の定義で使用できない理由がわかりません。
だから私はこれを持っています:
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>