Disons que j'ai une classe nommée Frog, elle ressemble à:
public class Frog
{
public int Location { get; set; }
public int JumpCount { get; set; }
public void OnJump()
{
JumpCount++;
}
}
J'ai besoin d'aide avec 2 choses:
public event EventHandler Jump;
public void OnJump()
{
EventHandler handler = Jump;
if (null != handler) handler(this, EventArgs.Empty);
}
puis
Frog frog = new Frog();
frog.Jump += new EventHandler(yourMethod);
private void yourMethod(object s, EventArgs e)
{
Console.WriteLine("Frog has Jumped!");
}
@CQ: Pourquoi créez-vous une copie locale de Jump
? En outre, vous pouvez enregistrer le test suivant en modifiant légèrement la déclaration de l'événement:
public event EventHandler Jump = delegate { };
public void OnJump()
{
Jump(this, EventArgs.Empty);
}
Voici un exemple d'utilisation d'un gestionnaire d'événements normal ou d'un délégué personnalisé. Notez que ?.
est utilisé à la place de .
pour assurer que si l'événement est null, il échouera proprement (retourne null)
public delegate void MyAwesomeEventHandler(int rawr);
public event MyAwesomeEventHandler AwesomeJump;
public event EventHandler Jump;
public void OnJump()
{
AwesomeJump?.Invoke(42);
Jump?.Invoke(this, EventArgs.Empty);
}
Notez que l'événement lui-même n'est nul s'il n'y a aucun abonné et qu'une fois appelé, l'événement est thread-safe. Vous pouvez donc également affecter un gestionnaire vide par défaut pour vous assurer que l'événement n'est pas nul. Notez que cela est techniquement vulnérable à une autre personne qui efface tous les événements (à l'aide de GetInvocationList). Utilisez-le avec prudence.
public event EventHandler Jump = delegate { };
public void OnJump()
{
Jump(this, EventArgs.Empty);
}