Quando si crea una maschera o un controllo utente, il progettista WinForms genera un metodo dispose che assomiglia a questo:Perché il progettista WinForms genera un codice un po '"scomodo" nel suo metodo di smaltimento?
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Il problema con questo codice è che può portare a un comportamento errato se è mai modificato per smaltire oggetti aggiuntivi. Ho visto i file .designer.cs con METODI DI SMALTIMENTO che assomigliano a questo:
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);
}
... che non è corretto, in quanto lo smaltimento dei _myDisposable e _myOtherDisposable non dovrebbe dipendere o meno di componenti è nullo.
Quindi, ignorando l'argomento sull'opportunità o meno di modificare questo codice generato dal designer e ignorando il fatto che è possibile modificarlo modificando i modelli, la mia domanda è: perché il progettista non genera codice sembra più questo?
protected override void Dispose(bool disposing)
{
if (disposing)
{
if(components != null)
components.Dispose();
}
base.Dispose(disposing);
}
Questo codice ha lo stesso risultato finale, ma è più sicuro e meno soggetto a errori durante la modifica.
Il primo e il terzo blocco di codice sono (quasi) uguali. O mi sta sfuggendo qualcosa? –
@Erno - Hai ragione, dal momento che '&&' andrà in cortocircuito. – Oded
Quindi non c'è dubbio (cucchiaio)? –