Nous sommes tous familiers avec l'horreur qui est en C# d'événements de la déclaration. Pour assurer le thread de sécurité, la norme est d'écrire quelque chose comme ceci:
public event EventHandler SomethingHappened;
protected virtual void OnSomethingHappened(EventArgs e)
{
var handler = SomethingHappened;
if (handler != null)
handler(this, e);
}
Récemment dans certains autres question sur ce forum (dont je ne peux pas trouver), quelqu'un a fait remarquer que les méthodes d'extension peut être utilisé 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 de 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? Sommes-nous oublié quelque chose en n'ayant pas la norme Sur la méthode? (Une chose que je constate, c'est qu'il ne fonctionne pas avec les événements qui ont explicites ajouter/supprimer le code.)