Wszyscy znamy przerażenie, które jest deklaracją zdarzenia C#. Aby zapewnić bezpieczeństwo, nitki the standard is to write something like this:Podnoszenie zdarzeń C# za pomocą metody rozszerzenia - czy to źle?
public event EventHandler SomethingHappened;
protected virtual void OnSomethingHappened(EventArgs e)
{
var handler = SomethingHappened;
if (handler != null)
handler(this, e);
}
Ostatnio w jakimś innym pytaniem na tej płycie (które nie mogę znaleźć teraz), ktoś zwrócił uwagę, że rozszerzenie metody mogą być wykorzystane ładnie w tym scenariuszu. Oto jeden ze sposobów, aby to zrobić:
static public class EventExtensions
{
static public void RaiseEvent(this EventHandler @event, object sender, EventArgs e)
{
var handler = @event;
if (handler != null)
handler(sender, e);
}
static public void RaiseEvent<T>(this EventHandler<T> @event, object sender, T e)
where T : EventArgs
{
var handler = @event;
if (handler != null)
handler(sender, e);
}
}
Z tych metod rozszerzenie na swoim miejscu, wszystko trzeba zadeklarować i podnieść zdarzenie jest mniej więcej tak:
public event EventHandler SomethingHappened;
void SomeMethod()
{
this.SomethingHappened.RaiseEvent(this, EventArgs.Empty);
}
Moje pytanie: Czy to dobry pomysł ? Czy brakuje nam czegoś, nie mając standardowej metody On? (Jedną z rzeczy, które zauważam jest to, że nie działa z wydarzeniami, które mają wyraźny kod dodawania/usuwania).
Może myślisz o tym pytaniu: http://stackoverflow.com/questions/192980/boiler-plate-code-replacement-is-there-nething-bad-about-to-code – Benjol