Qué problema tiene este código?
"I get down on my knees and I start to pray
Till the tears run down from my eyes, oh
Somebody, somebody, can anybody find me
Somebody to love?"
("Somebody to love", Queen, 1976)
Aquí va un puzle que sin dudas resultará sencillo para muchos, pero que puede que le enseñe algo interesante a otros.
El siguiente programa presenta una clase que publica un evento, y otra que se suscribe al mismo. Para simplificar, se asume que el evento no requiere datos personalizados, por lo que es del tipo predefinido EventHandler.
Qué problema(s) tiene la implementación de la clase publicadora? La respuesta - en una próxima entrega.
using System;
namespace ConsoleApplication1
{
// Class that publishes an event
class Publisher
{
// Declare the event
public event EventHandler MyEvent;
public void DoSomething()
{
// Block of code that does something
// Raise the event. You could also raise the event
// before executing the block of code
if (MyEvent != null)
{
MyEvent(this, EventArgs.Empty);
}
}
}
//Class that subscribes to an event
class Subscriber
{
public Subscriber(Publisher pub)
{
// Subscribe to the event using C# 2.0 syntax
pub.MyEvent += HandleMyEvent;
}
// Define what actions to take when the event is raised
public void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Event raised");
}
}
class Program
{
static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber(pub);
// Call the method that raises the event
pub.DoSomething();
// etc...
}
}
}
Pop/rock tip: Ya hemos hecho referencia anteriormente en este blog a Queen, un grupo que sin lugar a dudas ocupa un lugar muy destacado en la historia del rock. "Somebody to love" es una de mis canciones favoritas, y el ejemplo perfecto (junto con "Bohemian Rhapsody") de una de las características mas sobresalientes de la música de Queen: las intrincadas armonías vocales. La letra de la canción no tiene nada que ver con el puzle - aunque el título del disco al que la canción pertenece sí ;-).
(Abril 13 de 2009): El título del álbum en cuestión es "A day at the races".