Viene visualizzato un avviso quando si esegue un codice tramite l'utilità di analisi del codice di Visual Studio che non sono sicuro su come risolvere. Forse qualcuno qui ha trovato un problema simile, lo ha risolto ed è disposto a condividere le proprie opinioni.CA2000 passando il riferimento oggetto al costruttore base in C#
Sto programmando una cella personalizzata utilizzata in un controllo DataGridView. Il codice è simile:
public class DataGridViewMyCustomColumn : DataGridViewColumn
{
public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell())
{
}
genera il seguente avviso:
CA2000: Microsoft.Reliability: Nel metodo 'DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()' chiamare System.IDisposable.Dispose sull'oggetto 'nuova DataGridViewMyCustomCell() 'prima che tutti i riferimenti siano fuori portata.
ho capito che mi sta avvisando DataGridViewMyCustomCell (o di una classe che eredita da) implementa l'interfaccia IDisposable e il metodo Dispose() dovrebbe essere chiamato per ripulire tutte le risorse rivendicate da DataGridViewMyCustomCell quando non è più.
Gli esempi che ho visto su Internet suggeriscono un blocco usando per circoscrivere la durata dell'oggetto e il sistema lo dispone automaticamente, ma la base non viene riconosciuta quando viene spostata nel corpo del costruttore così posso scrivere un blocco usando attorno ad esso ... che non sono sicuro di voler fare comunque, dal momento che non dovrebbe istruire il tempo di esecuzione per liberare l'oggetto che potrebbe ancora essere usato in seguito all'interno della classe base?
La mia domanda è, quindi, il codice è ok? Oppure, come potrebbe essere refactored per risolvere l'avvertimento? Non voglio sopprimere l'avviso a meno che non sia veramente appropriato farlo.
+1 per "completamente rotto in VS10". È molto difficile convincere le persone ad unirsi a me in un giro di miglioramento della qualità del codice quando gli strumenti mi fanno sembrare così stupido ... –