Я видел, что люди определяют свои события как это:
public event EventHandler<EventArgs> MyEvent = delegate{};
Кто-то может объяснить, как это отличается от определения его без него? Это должно постараться не проверять на пустой указатель при генерировании события?
Вы поняли - добавление пустого делегата позволяет избежать этого:
public void DoSomething() {
if (MyEvent != null) // Unnecessary!
MyEvent(this, "foo");
}
Это объявление гарантирует, что MyEvent
никогда не будет нулевым, что устраняет утомительную и подверженную ошибкам задачу проверки на нулевое значение каждый раз за счет выполнения дополнительного пустого делегата каждый раз при запуске события. .