За пределами определяющего класса, как упоминает @Telos, вы можете использовать EventHandler только с левой стороны от +=
или -=
. Таким образом, если у вас есть возможность изменить определяющий класс, вы можете предоставить метод для выполнения проверки, проверив, является ли обработчик события null
- если так, то обработчик события не был добавлен. Если нет, то, возможно, и вы можете просмотреть значения в
Delegate.GetInvocationList . Если один равен делегату, который вы хотите добавить в качестве обработчика события, то вы знаете, что он есть.
public bool IsEventHandlerRegistered(Delegate prospectiveHandler)
{
if ( this.EventHandler != null )
{
foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
{
if ( existingHandler == prospectiveHandler )
{
return true;
}
}
}
return false;
}
И это можно легко изменить, чтобы он стал "добавить обработчик, если его там нет". Если у вас нет доступа к внутренностям класса, представляющего событие, вам, возможно, потребуется изучить -=
и +=
, как предлагает @Lou Franco.
Однако вам, возможно, будет лучше пересмотреть способ ввода и вывода этих объектов из эксплуатации, чтобы выяснить, не можете ли вы найти способ самостоятельно отслеживать эту информацию.