EDITポスターヒントから基本クラスはINotifyPropertyChangedを実装しています。派生型はPropertyChangedイベントを使用できますか?
は、私は、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からの関連リンクで質問を更新しました。ありがとうございます! – Aybe