【发布时间】:2013-05-14 21:35:21
【问题描述】:
我正在创建 WPF 应用程序,但遇到了继承问题。
我有一个名为 DataHandler 的类,它在 GUI 类和数据类之间建立了联系。
代码需要保持打开状态,因为 GUI 或 Data 部分将来可能会发生变化,因此DataHandler 使用接口或抽象类引用到真正的 GUI/Data 类。
例如,我有一个SelectionFrame,它需要使用SetSelection() 和GetSelection(),我创建了一个ISelectionGUI 接口,它具有这两种方法。 SelectionFrame实现它。
public interface ISelectionGUI
{
void SetSelection(HashSet<String> fields);
void GetSelection(HashSet<String> fields);
}
public partial class SelectionFrame : Window, ISelectionGUI
{
[...]
}
在DataHandler 类中是这样的:
ISelectionGUI sF = new SelectionFrame();
但在执行此操作时,我无法使用 Window 方法,除非我这样转换:
((Window)sF).Show();
这似乎不是最好的解决方案,因为没有什么会迫使下一个开发人员扩展 Window。
我还尝试使用扩展Window 的抽象类并拥有我需要的方法。 SelectionFrame扩展了那个类,我改变了xaml (following this):
<base:ISelectionGUI x:Class="WFChecker.SelectionFrame"
[...]
xmlns:base="clr-namespace:WFChecker"
[...]
</base:ISelectionGUI>
但我没有工作,因为 VisualStudio 不允许我在设计器中使用抽象类。
我的问题是:如何创建一个实现类或扩展抽象类的框架,同时仍然能够访问 Window 方法?
【问题讨论】:
-
只是为了交叉检查,您的 SelectionFrame 继承 Window 类并实现 ISelectionGUI?如果是,请分享完整的代码结构。
-
@SumitGupta,确实如此,编辑了我的帖子。
-
在你的界面中添加一个 show 方法?
-
@TonyHopkinson,但这意味着将我需要的每个方法从
Window类添加到ISelectionGUI。我不确定这是一个好方法。 -
我不太确定,但我记得在我的项目中,我通常在我的自定义基类中继承系统类,然后我开发的所有 Window 和 Form,我从我的基类而不是 Window 继承它们班级。似乎这里的 SelectionFrame 是部分类 [原始窗口],而不是创建一个 BaseSelection,继承/实现所有你想要的,然后使用该 Base 类作为 SelectionFrame 的父类。希望能解决。
标签: c# wpf oop inheritance