oggetti monouso non ottenere autodisposed (più vicino che può arrivare a che sta attuando un Finalizer che chiama Dispose
se necessario). Devi farlo manualmente chiamando Dispose()
o usandolo con un blocco using
.
Se si vuole auto smaltire l'oggetto, si potrebbe fare questo:
using (var g = new Graphics()) {
SomeMethod(g);
}
Il blocco utilizzando assicura che il metodo Dispose()
viene chiamato automaticamente non appena il blocco estremità (quindi in questo caso, dopo SomeMethod
restituisce o genera un'eccezione).
Nota: è necessario disporre l'oggetto nel punto in cui è stato creato, se possibile. Prendere un oggetto valido e smaltirlo all'interno del metodo potrebbe causare confusione.
Grafica e probabilmente la maggior parte se non tutte le classi BCL che implementano questa interfaccia chiameranno anche Dispose()
quando viene chiamato Finalizer. Questo fa parte di un'implementazione corretta di IDisposable
. Tuttavia non si sa mai quando viene chiamato il finalizzatore e non si dovrebbe fare affidamento su questi dettagli di implementazione se si desidera che l'oggetto venga eliminato in modo deterministico.
Oltre a "no", il metodo deve anche * non * essere responsabile per lo smaltimento dell'oggetto grafico. È importante che la vita degli oggetti grafici sia gestita in un unico posto, vale a dire che deve essere smaltita nella stessa classe in cui è stata creata. Disporre di un oggetto in un punto indefinito, lungo lo stack di chiamate, rende il codice difficile da comprendere e mantenere, e potrebbe facilmente portare a errori successivi. – MattDavey