【发布时间】:2013-10-22 15:21:44
【问题描述】:
编辑
从海报提示中,我在 MSDN 上找到了以下有用的链接:
How to: Raise Base Class Events in Derived Classes (C# Programming Guide)
Derived classes cannot raise base class events
在重构时,我遇到了一个有趣的问题,到目前为止我还没有找到答案:
重构包括创建一个实现INotifyPropertyChanged 的abstract 基类,派生类型将使用它而不是自己实现接口。
派生类型可以使用基类事件PropertyChanged 还是必须如下所示覆盖它?
如果他们必须override,你能解释一下为什么应该这样吗?
(注意:Resharper 已建议重构)
public abstract class BaseDTO : INotifyPropertyChanged
{
public virtual event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public class ReviewDTO : BaseDTO
{
private ImageSource _image;
private string _summary;
private string _url;
public string Url
{
get { return _url; }
set
{
if (value == _url) return;
_url = value;
OnPropertyChanged();
}
}
public string Summary
{
get { return _summary; }
set
{
if (value == _summary) return;
_summary = value;
OnPropertyChanged();
}
}
public ImageSource Image
{
get { return _image; }
set
{
if (Equals(value, _image)) return;
_image = value;
OnPropertyChanged();
}
}
public override event PropertyChangedEventHandler PropertyChanged;
}
【问题讨论】:
-
绝对没有理由(我可以考虑)事件本身是虚拟的或被覆盖的。
-
我已经用 MS 的相关链接更新了问题,证实了你的说法,谢谢大家!
标签: c# refactoring inotifypropertychanged