Cuando se crea un formulario o un control de usuario, el diseñador de Windows Forms genera un método dispose que tiene este aspecto:¿Por qué el diseñador de WinForms genera un código un tanto "inconveniente" en su método de eliminación?
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
El problema con este código es que puede conducir a un comportamiento incorrecto si se edita nunca deseche objetos adicionales. He visto .designer.cs archivos con los métodos Desechar que se ven así:
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);
}
... lo cual es incorrecto, ya que la disposición de _myDisposable y _myOtherDisposable no debe depender de si o no componentes es nula.
Así que, ignorando el argumento sobre si es una buena práctica editar este código generado por el diseñador e ignorando el hecho de que puede cambiarlo editando las plantillas, mi pregunta es: ¿Por qué el diseñador no genera código? que se parece más a esto?
protected override void Dispose(bool disposing)
{
if (disposing)
{
if(components != null)
components.Dispose();
}
base.Dispose(disposing);
}
Este código tiene el mismo resultado final, pero es más seguro y menos propenso a errores durante la modificación.
El primer y tercer bloque de códigos son (casi) lo mismo. ¿O me estoy perdiendo algo? –
@Erno - Tiene razón, ya que '&&' provocará un cortocircuito. – Oded
Entonces, no hay pregunta (cuchara)? –