Подтвердить что ты не робот

Как добавить событие в класс

Скажем, у меня есть класс с именем Frog, он выглядит так:

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


     public void OnJump()
     {
         JumpCount++;
     }

}

Мне нужна помощь с двумя вещами:

  • Я хочу создать событие с именем Jump в определении класса.
  • Я хочу создать экземпляр класса Frog, а затем создать другой метод, который будет вызываться, когда прыгает Frog.
4b9b3361

Ответ 1

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

затем

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

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

Ответ 2

Я не слишком четко понимаю ваш вопрос. Вы хотите знать синтаксис событий? Почему бы не посмотреть в учебник в официальной документации?

Ответ 3

@CQ: Почему вы создаете локальную копию pf Jump? Кроме того, вы можете сохранить последующий тест, слегка изменив объявление события:

public event EventHandler Jump = delegate { };

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

Ответ 4

Вот пример того, как использовать обычный EventHandler или пользовательский делегат. Обратите внимание, что ?. используется вместо . чтобы убедиться, что если событие равно нулю, оно будет сбой чисто (вернуть ноль)

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

Обратите внимание, что само событие является нулевым, только если нет подписчиков, и что после вызова событие является поточно-ориентированным. Таким образом, вы также можете назначить пустой обработчик по умолчанию, чтобы событие не было пустым. Обратите внимание, что это технически уязвимо для кого-то, кто уничтожает все события (используя GetInvocationList), поэтому используйте его с осторожностью.

public event EventHandler Jump = delegate { };

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