【发布时间】:2016-05-04 08:03:50
【问题描述】:
我正在开发一个带有 MVVM 模式的 WPF,.NET Framework 4.6.1。和 C#。
我的问题不是关于 WPF,而是关于使用组合而不是继承这两个类:
public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
还有:
public class MainViewModel : ObservableObject
{
private string statusPrinter;
public string StatusPrinter
{
get { return statusPrinter; }
set
{
statusPrinter = value;
RaisePropertyChangedEvent("StatusPrinter");
}
}
}
MainViewModel 继承自 ObservableObject,我不想使用继承。
我可以这样做:
public class MainViewModel
{
private string statusPrinter;
private ObservableObject observable;
public string StatusPrinter
{
get { return statusPrinter; }
set
{
statusPrinter = value;
observable.RaisePropertyChangedEvent("StatusPrinter");
}
}
public MainViewModel()
{
observable = new ObservableObject();
}
}
但是当我使用组合时,ObservableObject 中的public event PropertyChangedEventHandler PropertyChanged; 似乎有问题。问题在于 XAML 链接时。
我可以在这里使用组合还是必须使用继承?
【问题讨论】:
-
这是一个很奇怪的要求。你为什么不想在这里继承?
-
@Dennis 我读了
Microsoft .NET: Architecting Applications for the Enterprise, Second Edition这本书,它谈到了避免继承。 -
为了你未来的理智,用
nameof语句替换那些硬编码的字符串!如果您的目标是 .NET 4.6.1,那么使用 C# 6 肯定没问题
标签: c# inheritance mvvm object-composition