it-swarm-pt.tech

Como adicionar um evento a uma turma

Digamos que eu tenha uma classe chamada Frog, parece que:

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


     public void OnJump()
     {
         JumpCount++;
     }

}

Preciso de ajuda com 2 coisas:

  1. Eu quero criar um evento chamado Jump na definição de classe.
  2. Eu quero criar uma instância da classe Frog e, em seguida, criar outro método que será chamado quando o sapo salta.
37
public static
public event EventHandler Jump;
public void OnJump()
{
    EventHandler handler = Jump;
    if (null != handler) handler(this, EventArgs.Empty);
}

então

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

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

Aqui está uma amostra de como usar um EventHandler normal ou um delegado personalizado. Observe que ?. é usado em vez de . para garantir que, se o evento for nulo, ele falhará de forma clara (retorno 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);
}

Observe que o evento em si é apenas nulo se não houver assinantes e, uma vez invocado, o evento for thread-safe. Portanto, você também pode atribuir um manipulador vazio padrão para garantir que o evento não seja nulo. Observe que isso é tecnicamente vulnerável a alguém eliminando todos os eventos (usando GetInvocationList), portanto, use com cuidado.

public event EventHandler Jump = delegate { };

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