Ho notato di recente alcuni comportamenti con Visual Studio Designer (C#) che non capisco e mi chiedevo se qualcuno potesse chiarire ...Perché l'IDE di Visual Studio a volte inizializza l'oggetto "this.components: e altre volte no?
Uno alcuni dei miei Windows Forms, la prima linea del designer ha generato codice legge;
this.components = new System.ComponentModel.Container();
Quando questo è il caso, il metodo Dispose, nello stesso file di progettazione, la Dispose metodo pone due chiamate "Dispose" all'interno del caso "se" condizione come segue:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
base.Dispose(disposing);
}
}
, ad esempio non viene chiamato nulla a meno che lo smaltimento sia vero, e le componenti non siano nulle.
Su alcune altre forme, manca quella prima riga nel codice generato dal designer. In questi casi la chiamata base.Dispose è fuori dalla condizione di "se" in quanto tale ...
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
ho notato questo mentre rintracciare un bug con una forma non di chiusura, in cui this.components era nullo, ma la chiamata base.Dispose era dentro quella condizione (ho il sospetto che il codice stilista era stato manomesso, ma questa è un'altra storia.
cosa controlla questo comportamento?
(Alcune forme precedenti del progetto sono stati creati in VS 2005 e ora usiamo VS 2008 - indizio?)
Grazie nobugz. Ho avuto la possibilità di provare anche questo scenario in VS2005. Va bene. Posso solo supporre, come dici tu, che questo è stato "autoindotto". –
"ora senza la chiamata del costruttore". Quindi, qual è il punto in '(components! = Null)' controlla se non c'è l'inizializzazione di 'components' da nessuna parte? Chi, quando e dove inizializza i 'componenti'? BTW, è arrivato da VS2010, .NET4.0 – Fulproof
Sembra che tu abbia una nuova domanda. Puoi chiederlo cliccando sul pulsante Ask Question. –