Nous connaissons tous l'horreur de la déclaration d'événement C#. Pour assurer la sécurité des threads, the standard is to write something like this:Élever des événements C# avec une méthode d'extension - est-ce mauvais?
public event EventHandler SomethingHappened;
protected virtual void OnSomethingHappened(EventArgs e)
{
var handler = SomethingHappened;
if (handler != null)
handler(this, e);
}
Récemment une autre question sur ce forum (que je ne peux pas trouver maintenant), quelqu'un a fait remarquer que les méthodes prolongation pourraient être utilisés bien dans ce scénario. Voici une façon de le faire:
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);
}
}
Avec ces méthodes d'extension en place, tout ce que vous devez déclarer et déclencher un événement est quelque chose comme ceci:
public event EventHandler SomethingHappened;
void SomeMethod()
{
this.SomethingHappened.RaiseEvent(this, EventArgs.Empty);
}
Ma question: Est-ce une bonne idée ? Manquons-nous quelque chose en n'ayant pas la méthode On standard? (Une chose que je remarque est que cela ne fonctionne pas avec les événements qui ont explicitement ajouter/supprimer du code.)
Peut-être que vous pensiez à cette question: http://stackoverflow.com/questions/192980/boiler-plate-code-replacement-is-there-anything-bad-about-this-code – Benjol