Я недавно заметил некоторое поведение с Visual Studio Designer (C #), которое я не понимаю, и мне было интересно, если кто-то может прояснить ...
Одна из моих Windows Forms, первая строка кода, сгенерированного дизайнером, гласит:
this.components = new System.ComponentModel.Container();
В этом случае метод dispose в том же файле конструктора метод dispose помещает два вызова «Dispose» в условие case «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 - подсказка?)