С# - Удаление обработчиков событий - событие FormClosing или Dispose()

Предположим, что у меня есть форма, открытая с помощью метода .ShowDialog().

В какой-то момент я прикрепляю некоторые обработчики событий к некоторым элементам управления в форме.

например.

// Attach radio button event handlers.
this.rbLevel1.Click += new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel2.Click += new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel3.Click += new EventHandler(this.RadioButton_CheckedChanged);

Когда форма закрывается, мне нужно удалить эти обработчики, правильно?

В настоящее время я делаю это, когда происходит событие FormClosing.

например.

private void Foo_FormClosing(object sender, FormClosingEventArgs e)
{
    // Detach radio button event handlers.
    this.rbLevel1.Click -= new EventHandler(this.RadioButton_CheckedChanged);
    this.rbLevel2.Click -= new EventHandler(this.RadioButton_CheckedChanged);
    this.rbLevel3.Click -= new EventHandler(this.RadioButton_CheckedChanged);
}

Однако я видел несколько примеров, когда обработчики удаляются в методе Dispose().

Есть ли способ "лучше всего" сделать это?

(Использование С#, Winforms,.NET 2.0)

Спасибо.

Ответ 1

Вам не нужно удалять обработчики в этом случае, потому что ни форма, ни ее кнопки не ссылаются на код, внешний по форме, и поэтому весь граф объекта будет собран в мусор.

Ответ 2

Нет, вам не нужно удалять обработчики событий из элементов управления в закрывающейся форме. Все они будут расположены вместе.

Вероятно, вы думаете о веб-страницах, где требуется удаление обработчиков событий, чтобы избежать утечек памяти в браузере.