編集
ポスターのヒントから、MSDN で次の役立つリンクを見つけました。
方法: 派生クラスで基本クラス イベントを発生させる (C# プログラミング ガイド)
派生クラスは基本クラスのイベントを発生させることはできません
リファクタリング中に、これまで答えが見つからなかった興味深い質問に出くわしました。
リファクタリングは、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;
}