【发布时间】:2015-08-05 22:52:00
【问题描述】:
我正在寻找一种更好的方法来在 C# 中做一个简单的多重继承模式。
我有从 WPF 的 Window 类继承的主窗口和从窗口,我希望它们都具有另一个通用接口/功能。
我首先想到的是实现一个继承自 Window 的 BaseWindow 类,Slave 和 Master 都继承自,
但由于 WPF 中的一些问题,它们(主窗口和从窗口)必须直接从 Window(而非 BaseWindow)继承。
所以我定义了一个这样的接口
public interface MasterOrSlaveWindow
{
View CurrentView { get; set; }
}
Master 和 Slave 都实现了它:
public partial class SlaveWindwow : Window, MasterOrSlaveWindow
{
protected View m_CurrentView = null;
public View CurrentView {
get { return m_CurrentView; }
set
{
if (value == null && m_CurrentView != null)
m_CurrentView.Owner = null;
m_CurrentView = value;
if (m_CurrentView != null)
m_CurrentView.Owner = this;
}
}
}
它适用于实现不同的情况,但对于相同的情况,我们有代码重复:
public partial class MasterWindwow : Window, MasterOrSlaveWindow
{
protected View m_CurrentView = null;
public View CurrentView {
get { return m_CurrentView; }
set
{
if (value == null && m_CurrentView != null)
m_CurrentView.Owner = null;
m_CurrentView = value;
if (m_CurrentView != null)
m_CurrentView.Owner = this;
}
}
}
在这种情况下,避免代码重复的好方法是什么?
【问题讨论】:
-
您可以尝试解决“必须直接从窗口继承”的问题。或者,您可以将
CurrentView属性提取到一个单独的类,并让您的窗口通过它的一个实例。 -
使用组合而不是继承。 en.wikipedia.org/wiki/Object_composition
-
我很难相信它们必须直接继承自Window,但是我有一段时间没有做过WPF,所以在这里无法做出有效的判断。
标签: c# wpf multiple-inheritance