Si escribo algo así como el código de abajo,¿Por qué los eventos con acceso directo personalizado no pueden activarse directamente como lo hacen los predeterminados?
class MainClass
{
static EventHandler _myEvent= delegate{};
static event EventHandler MyEvent
{
add{_myEvent += value;}
remove{_myEvent -= value;}
}
public static void Main (string[] args)
{
MyEvent(null,EventArgs.Empty);
}
}
el compilador se quejará: CS0079 de error: El evento MainClass.MyEvent' can only appear on the left hand side of
+ = 'o' - =' operador.
¿Por qué existe algo tan extraño como esto? Si no puedo lanzar un evento directamente, ¿por qué usaría tal cosa en primer lugar? ¿Es eso un error (estoy usando mono) o deliberadamente delicado diseño? ¿Alguien podría por favor enseñarme la razón detrás de esto? Gracias por adelantado.
Ese no es el problema aquí. El intento de acceder al evento _es_ desde dentro de la clase declarante ... –
@Nick: No, esto es absolutamente lo que está sucediendo: para un evento tipo campo, una llamada que parece estar invocando el evento está realmente invocando a través del campo . Luego, toma ese conocimiento y lo aplica al evento personalizado, invocando * that * a través del campo de respaldo también. –
@Jon: estoy de acuerdo en que puede retroceder en la forma en que se implementan los eventos de campo para comprender el error CS0079. Si la respuesta se hubiera concentrado en eso, hubiera sido +1 y hecho por mí. Sin embargo, la respuesta se centra en la accesibilidad privada del campo, y eso está al lado del punto. –