Pregunta

Digamos que tengo una clase llamada Frog, se ve así:

public class Frog
{
     public int Location { get; set; }
     public int JumpCount { get; set; }


     public void OnJump()
     {
         JumpCount++;
     }

}

Necesito ayuda con 2 cosas:

  1. Quiero crear un evento llamado Jump en la definición de clase.
  2. Quiero crear una instancia de la clase Frog y luego crear otro método que se llamará cuando Frog salte.
¿Fue útil?

Solución

public event EventHandler Jump;
public void OnJump()
{
    EventHandler handler = Jump;
    if (null != handler) handler(this, EventArgs.Empty);
}

entonces

Frog frog = new Frog();
frog.Jump += new EventHandler(yourMethod);

private void yourMethod(object s, EventArgs e)
{
     Console.WriteLine("Frog has Jumped!");
}

Otros consejos

@CQ:¿Por qué creas una copia local pf? Jump?Además, puedes guardar la prueba posterior cambiando ligeramente la declaración del evento:

public event EventHandler Jump = delegate { };

public void OnJump()
{
    Jump(this, EventArgs.Empty);
}

A continuación se muestra un ejemplo de cómo utilizar un EventHandler normal o un delegado personalizado.Tenga en cuenta que ?. se utiliza en lugar de . para asegurar que si el evento es nulo, fallará limpiamente (devuelve nulo)

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);
}

Tenga en cuenta que el evento en sí solo es nulo si no hay suscriptores y que, una vez invocado, el evento es seguro para subprocesos.Por lo tanto, también puede asignar un controlador vacío predeterminado para asegurarse de que el evento no sea nulo.Tenga en cuenta que esto es técnicamente vulnerable a que otra persona borre todos los eventos (usando GetInvocationList), así que utilícelo con precaución.

public event EventHandler Jump = delegate { };

public void OnJump()
{
    Jump(this, EventArgs.Empty);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top