* esto solía ser en el cuerpo cuestión
Lo que sería muy útil es un no trivial ejemplo de una aplicación que utiliza eventos (¿supongo que realmente ayuda a probar también?)
Pensamientos hasta ahora son:
¿Por qué utilizar Eventos o publicar/suscribir?
Se puede notificar cualquier cantidad de clases cuando se produce un evento.
La suscripción clases no necesitan saber cómo el metrónomo (ver código de abajo) funciona, y el metrónomo no necesitan saber lo que van a hacer en respuesta al evento
El editor y los suscriptores están desacoplados por el delegado. Esto es altamente deseable ya que hace que el código sea más flexible y robusto. El metrónomo puede cambiar la forma en que detecta el tiempo sin romper ninguna de las clases que se suscriben. Las clases de suscripción pueden cambiar la forma en que responden a los cambios de tiempo sin romper el metrónomo. Las dos clases giran independientemente unas de otras, lo que hace que el código sea más fácil de mantener.
class Program
{
static void Main()
{
// setup the metronome and make sure the EventHandler delegate is ready
Metronome metronome = new Metronome();
// wires up the metronome_Tick method to the EventHandler delegate
Listener listener = new Listener(metronome);
ListenerB listenerB = new ListenerB(metronome);
metronome.Go();
}
}
public class Metronome
{
// a delegate
// so every time Tick is called, the runtime calls another method
// in this case Listener.metronome_Tick and ListenerB.metronome_Tick
public event EventHandler Tick;
// virtual so can override default behaviour in inherited classes easily
protected virtual void OnTick(EventArgs e)
{
// null guard so if there are no listeners attached it wont throw an exception
if (Tick != null)
Tick(this, e);
}
public void Go()
{
while (true)
{
Thread.Sleep(2000);
// because using EventHandler delegate, need to include the sending object and eventargs
// although we are not using them
OnTick(EventArgs.Empty);
}
}
}
public class Listener
{
public Listener(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("Heard it");
}
}
public class ListenerB
{
public ListenerB(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("ListenerB: Heard it");
}
}
Artículo completo que estoy escribiendo en mi sitio: http://www.programgood.net/
nb parte de este texto es de http://www.akadia.com/services/dotnet_delegates_and_events.html
Saludos.
este es un sitio de preguntas y respuestas, no es un blog ... si realmente quieres recibir comentarios aquí, reduce tu pregunta a ... solo la pregunta, y publica el resto como respuesta. – Shog9