Diciamo che ho una classe chiamata Frog, sembra che:
public class Frog
{
public int Location { get; set; }
public int JumpCount { get; set; }
public void OnJump()
{
JumpCount++;
}
}
Ho bisogno di aiuto con 2 cose:
public event EventHandler Jump;
public void OnJump()
{
EventHandler handler = Jump;
if (null != handler) handler(this, EventArgs.Empty);
}
poi
Frog frog = new Frog();
frog.Jump += new EventHandler(yourMethod);
private void yourMethod(object s, EventArgs e)
{
Console.WriteLine("Frog has Jumped!");
}
@ CQ: Perché crei una copia locale di Jump
? Inoltre, puoi salvare il test successivo cambiando leggermente la dichiarazione dell'evento:
public event EventHandler Jump = delegate { };
public void OnJump()
{
Jump(this, EventArgs.Empty);
}
Ecco un esempio di come utilizzare un normale EventHandler o un delegato personalizzato. Si noti che ?.
è usato al posto di .
per assicurare che se l'evento è nullo, fallirà in modo pulito (restituisce 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);
}
Si noti che l'evento stesso è nullo se non ci sono abbonati e che una volta invocato, l'evento è thread-safe. Quindi puoi anche assegnare un gestore vuoto predefinito per assicurare che l'evento non sia nullo. Si noti che questo è tecnicamente vulnerabile a qualcun altro che cancella tutti gli eventi (utilizzando GetInvocationList), quindi utilizzare con cautela.
public event EventHandler Jump = delegate { };
public void OnJump()
{
Jump(this, EventArgs.Empty);
}