Ayb*_*ybe 8 c# refactoring inotifypropertychanged
编辑
从海报提示,我在MSDN上找到了以下有用的链接:
在重构的过程中,我遇到了一个有趣的问题,到目前为止我还没有找到答案:
重构包括创建实现的abstract
基类INotifyPropertyChanged
,派生类型将使用它而不是自己实现接口.
派生类型可以使用基类事件,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;
}
Run Code Online (Sandbox Code Playgroud)
我不认为他们必须覆盖.
基类型可以定义一个
protected void RaisePropertyChanged(string propertyName);
派生类只能调用基本方法来触发属性通知.
刚刚找到一些支持证据: 关于实现INotifyPropertyChanged的MSDN页面
当然,您的基本类型可以添加更多好东西
归档时间: |
|
查看次数: |
8983 次 |
最近记录: |