Od plakatów podpowiedzi, Znalazłem następujące pomocne linki na MSDN:
How to: Raise Base Class Events in Derived Classes (C# Programming Guide)
Derived classes cannot raise base class events
Podczas refaktoryzacji Natknąłem ciekawy Pytanie, na które nie znalazłem dotychczas odpowiedzi:
Refaktoryzacja polega na utworzeniu klasy bazowej abstract
, która implementuje INotifyPropertyChanged
, a wyprowadzone typy użyłyby jej zamiast implementacji samego interfejsu.
Czy typy pochodne mogą wykorzystywać zdarzenie klasy bazowej PropertyChanged
, czy muszą je przesłonić, jak pokazano poniżej?
Jeśli muszą override
, czy możesz wyjaśnić powody, dla których tak powinno być?
(uwaga: refaktoring zostało zasugerowane przez 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;
}
Nie ma absolutnie żadnego powodu (który mógłbym wymyślić), aby samo zdarzenie było wirtualne lub przesłonięte. –
Mam zaktualizowane pytanie z odpowiednimi linkami z MS, które potwierdzają twoje słowa, dziękuję wszystkim! – Aybe