Вот пример того, как использовать обычный EventHandler или пользовательский делегат. Обратите внимание, что ?.
используется вместо .
, чтобы гарантировать, что если событие имеет значение null, оно завершится с ошибкой (вернет 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);
}
Обратите внимание, что само событие является нулевым, если нет подписчиков, и что после вызова событие является поточно-ориентированным. Таким образом, вы также можете назначить пустой обработчик по умолчанию, чтобы событие не было пустым. Обратите внимание, что это технически уязвимо для кого-то, кто уничтожает все события (используя GetInvocationList), поэтому используйте его с осторожностью.
public event EventHandler Jump = delegate { };
public void OnJump()
{
Jump(this, EventArgs.Empty);
}