【发布时间】:2017-09-18 22:19:42
【问题描述】:
我创建了两个具有不同用途的 DataGridView,我想将它们组合在一起。我之前没有意识到你不能从多个基类继承。
我查看了其他各种 Stack Overflow 问题,发现人们推荐界面或组合解决方案的共同主题。我尝试将这些概念应用到我的情况中,但它们似乎不太适合。
首先,这是我希望的结构...
RowSelectionDataGridView - 选择整行的 DataGridView 并具有用于轻松设置颜色等样式的选项
DragAndDropDataGridView - RowSelectionDataGridView,允许用户单击行以拖动到另一行的顶部并将行移动到它们被放置的位置
ContextMenuDataGridView - RowSelectionDataGridView 显示右键单击行上方的 ContextMenuStrip,用于复制、粘贴、删除等操作
CombinedDataGridView(不是实际名称)= DragAndDropDataGridView 和 ContextMenuDataGridView 可以让用户拖放并且在右键单击时还有一个上下文菜单条
DataGridView
▲
|
|
RowSelectionDatatGridView
▲
|
_____________________|_____________________
| |
| |
DragAndDropDataGridView ContextMenuDataGridView
▲ ▲
| |
|___________________________________________|
|
|
|
CombinedDataGridView
如果我要实现...
接口: 我的理解是 ContextMenuDataGridView 和 DragAndDropDataGridView 需要成为接口,然后 CombinedDataGridView 将从这两者继承。我不明白这一点,因为无论如何,所有逻辑都必须在 CombinedDataGridView 中实现。这样做的主要好处是什么?或者我对此有什么误解?
组合: 我的理解是,CombinedDataGridView 中会有 DragAndDropDataGridView 和 ContextMenuDataGridView 的实例。这似乎没有任何意义。
我需要如何构建我的类以获得我想要的功能?
【问题讨论】:
-
我想将它们组合在一起。嗯,是的,但是是什么让您认为 MI 会是一种很好且有用的方法呢??
-
@TaW 我以为一旦创建了不同的 DataGridViews 就会很容易,但是当我尝试
public class CombinedDataGridView : DragAndDropDataGridView, ContextMenuDataGridView时却收到错误消息,这让我感到非常惊讶。在看到那个错误之后,为什么我不能这样做是有道理的,但我不确定替代方法是什么。我认为您可以轻松地从共享相同基类的两个基类中派生出来,并且它可以获得两组功能。 -
第一步:摆脱 ooop(overdone oop)的想法,认为一切都已定义为它本来的样子。相反,大多数是由它可以做什么来定义的。哪些是你给一个好名字和分组的方法,是的,接口。而且,是的,它们必须在每个参与类中实现。这不是那么乏味,而是每次都有机会正确地做到这一点..
标签: c# inheritance interface multiple-inheritance composition