Personalmente, preferirei non vedere le implementazioni IDisposable
nelle dichiarazioni using
.
Quindi, se si ha il codice come questo:
var fs = new FileStream(...);
// Other code.
fs.Dispose();
E si direbbe di usarlo in un comunicato using
.
Il vantaggio sarebbe che ti avviserà di casi in cui potresti non essere a conoscenza di dove gli oggetti che devono essere smaltiti non vengono smaltiti in modo tempestivo.
Tuttavia, ci sono abbastanza volte in cui è una situazione valida NON dichiarare le implementazioni IDisposable
in un'istruzione using per una regola come questa per diventare un dolore molto rapidamente. Molto spesso, questo caso sta prendendo un'implementazione IDisposable
come parametro per un metodo.
Quello che faccio non dire è usi delle classi in cui i dettagli di implementazione eliminano la necessità di chiamare Dispose
, (ad esempio MemoryStream
o DataContext
); quelli implementano IDisposable
e devono sempre avere Dispose
chiamato su di essi, indipendentemente dall'implementazione dettagli, poiché è sempre meglio codificare il contratto esposto.
FXCop non esegue il controllo del codice statico, controlla l'assembly compilato (IL). L'analisi del codice statico viene eseguita tramite StyleCop. –
@BeowulfOF, direi che FXCop ha fatto il controllo del codice statico, semplicemente non controlla il numero di spazi su ciascun lato di un "=" ecc. StyleCop fa più controllo di stile, ad es. id non traccia il flusso di controllo tra i metodi ecc. –
Microsoft dichiara che solo gli assembly vengono analizzati da FXCop, non il codice sorgente. http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx –