¿Cuál es la diferencia entre eventOne (con la palabra clave 'event') y eventTwo (sin la palabra clave)?¿La palabra clave 'evento' es opcional en C#?
class Program
{
public event EventHandler eventOne;
public EventHandler eventTwo;
public void RaiseOne()
{
if (eventOne != null)
eventOne(this, EventArgs.Empty);
}
public void RaiseTwo()
{
if (eventTwo != null)
eventTwo(this, EventArgs.Empty);
}
static void Main(string[] args)
{
var p = new Program();
p.eventOne += (s, e) => Console.WriteLine("One");
p.eventTwo += (s, e) => Console.WriteLine("Two");
p.RaiseOne();
p.RaiseTwo();
}
}
¿Ha tenido un vistazo a IL real? Te sorprenderás. – Prankster
Sí, tengo. ¿Qué te sorprendió? –
Si bien 'add' y 'remove' se generan en realidad, el compilador los optimizó, por lo que en el código anterior la única diferencia serán los modificadores de acceso en los delegados. – Prankster