para una versión estática de la respuesta de Reed Copsey, he creado una clase estática Event
:
public static class Event
{
public static bool Raise<T>(Object source, EventHandler<T> eventHandler, T eventArgs) where T : EventArgs
{
EventHandler<T> handler = eventHandler;
if (handler != null)
{
handler(source, eventArgs);
return true;
}
return false;
}
}
Esto también asume sus controladores de eventos son del tipo EventHandler<T>
. El tipo de devolución se cambió de void
a bool
y devuelve si hubo oyentes del evento. Rara vez se usa, así que siéntete libre de volver a cambiar al void
.
Ejemplo de uso:
public event EventHandler<FooArgs> FooHappend;
public void Foo()
{
Event.Raise(this, FooHappend, new FooArgs("Hello World!");
}
con esta implementación, ¿hay alguna necesidad de poner el controlador en una variable local antes de comprobar nulo para evitar la condición de carrera? –
@ mohsen.d No hay condiciones de carrera. eventHandler es un parámetro. – CrazyCasta
@Reed Copsey, disculpe, pero ¿puede explicarme un poco más? gracias –