Код: Выделить всё
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Код: Выделить всё
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
// Set large fields to null.
disposed = true;
}
}
Хорошо ли отменять регистрацию от внешних событий в методе Dispose Класс IDiposable?
Плохо ли не отменять регистрацию обработчиков событий?
Должен ли я всегда отключать обработчики событий в Dispose?
Насколько я понимаю, цель отмены регистрации событий — разорвать циклическую ссылку, которая сдерживает сборщик мусора:
Но многие мнения утверждают, что вам не нужно разрывать этот цикл, если элемент, на который вы подписались, «недолговечен» или принадлежит form и построен с помощью дизайнера.
Умеет ли компоненты.Dispose() или base.Dispose(dispositing) каким-то образом установить мой локальный частный System. Windows.Forms.Button button1 ссылка на ноль или отмену регистрации моего обработчика событий this.button1.Click += new System.EventHandler(this.button1_Click);? Не похоже, что компоненты когда-либо инициализируются, поэтому компоненты.Dispose() даже не будут запущены? Мы хотим, чтобы кнопка button1 просуществовала недолго и исчезла вместе с формой, но разве у нас здесь нет ссылочного цикла, который также не позволяет сборщику мусора выполнить очистку?
Подробнее здесь: https://stackoverflow.com/questions/344 ... registered