Когда вы создаете форму или пользовательский элемент управления, дизайнер WinForms генерирует метод dispose, который выглядит следующим образом:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Проблема с этим кодом состоит в том, что он может привести к некорректному поведению, если онкогда-либо редактировал, чтобы избавиться от дополнительных объектов.Я видел файлы .designer.cs с методами dispose, которые выглядят так:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
if (_myDisposable != null)
_myDisposable.Dispose();
if (_myOtherDisposable != null)
_myOtherDisposable.Dispose();
}
base.Dispose(disposing);
}
... что неверно, так как удаление _myDisposable и _myOtherDisposable не должно зависеть от того, являются ли компоненты пустыми.
Итак, игнорируя аргумент о том, является ли хорошей практикой редактировать этот код, сгенерированный дизайнером, и игнорируя тот факт, что вы можете изменить его, редактируя шаблоны, мой вопрос: почему дизайнер не делаетгенерировать код, который выглядит примерно так?
protected override void Dispose(bool disposing)
{
if (disposing)
{
if(components != null)
components.Dispose();
}
base.Dispose(disposing);
}
Этот код имеет тот же конечный результат, но безопаснее и менее подвержен ошибкам во время модификации.