Недавно я заметил некоторое поведение с Visual Studio Designer (С#), которое я не понимаю, и задавался вопросом, может ли кто-нибудь уточнить...
Один из моих Windows Forms, первая строка кода, созданного конструктором, читается;
this.components = new System.ComponentModel.Container();
Если это так, метод удаления в том же файле-дизайнере, метод dispose помещает два "Dispose" вызова в случае "if" следующим образом:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
base.Dispose(disposing);
}
}
то есть. Ничего не вызвано, если утилизация не верна, а компоненты не являются нулевыми.
В некоторых других формах эта первая строка в коде, сгенерированном конструктором, отсутствует. В этих случаях вызов base.Dispose находится вне условия "if" как таковой...
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Я заметил это при отслеживании ошибки с формой, не закрывающейся, где this.components был нулевым, но вызов base.Dispose находился внутри этого условия (я подозреваю, что код дизайнера был подделан, но эта другая история.
Что контролирует это поведение?
(Некоторые более ранние формы в проекте были созданы в VS 2005, и теперь мы используем VS 2008 - ключ?)