En mi clase quiero declarar un evento al que otras clases puedan suscribirse. ¿Cuál es la forma correcta de declarar el evento?¿Cuál es la sintaxis para declarar un evento en C#?
Esto no funciona:
public event CollectMapsReportingComplete;
En mi clase quiero declarar un evento al que otras clases puedan suscribirse. ¿Cuál es la forma correcta de declarar el evento?¿Cuál es la sintaxis para declarar un evento en C#?
Esto no funciona:
public event CollectMapsReportingComplete;
Se le olvidó mencionar el tipo . Para eventos muy simples, EventHandler
podría ser suficiente:
public event EventHandler CollectMapsReportingComplete;
veces querrá declarar su propio tipo de delegado que se utilizará para sus eventos, lo que permite utilizar un tipo personalizado para el parámetro EventArgs
(ver el comentario de Adam Robinson):
public delegate void CollectEventHandler(object source, MapEventArgs args);
public class MapEventArgs : EventArgs
{
public IEnumerable<Map> Maps { get; set; }
}
también puede utilizar el tipo genérico de EventHandler
en lugar de declarar sus propios tipos:
public event EventHandler<MapEventArgs> CollectMapsReportingComplete;
No vamos a votar negativamente por esto, pero la convención en .NET es que los delegados de evento solo deberían incluir un remitente ('objeto') y un parámetro adicional que herede de' EventArgs'. Hacer esto también le permitirá usar el tipo de delegado genérico 'EventHandler
@ Adam: Tiene toda la razón, y he actualizado mi respuesta para reflejar esto. –
Es necesario especificar el tipo delegado del evento:
public event Action CollectMapsReportingComplete;
Aquí he utilizado System.Action
pero se puede utilizar cualquier tipo de delegado que desee (incluso un delegado personalizado). Se usará una instancia del tipo de delegado que especifique como campo de respaldo para el evento.
public event EventHandler MyEvent;
Un ejemplo
/// </summary>
/// Event triggered when a search is entered in any <see cref="SearchPanel"/>
/// </summary>
public event EventHandler<string> SearchEntered
{
add { searchevent += value; }
remove { searchevent -= value; }
}
private event EventHandler<string> searchevent;
evento público [DelegateType] [eventName];
@IlliaRatkevych Me gusta tener esta pregunta aquí, el diseño de SO es más fácil de leer que la mayoría de la documentación de MSDN. –
@IlliaRatkevych No estoy de acuerdo - SO no está destinado a ser utilizado por programadores "expertos", se supone que debe ayudar a todos los desarrolladores de todos los niveles. Esta es una pregunta totalmente legítima en mi honesta opinión. –