Personalmente, preferiría ver que no se usan las implementaciones IDisposable
en las declaraciones using
.
Así que si había un código como éste:
var fs = new FileStream(...);
// Other code.
fs.Dispose();
Sería decirle a usarlo en un comunicado using
.
El beneficio sería que lo alertaría sobre casos en los que podría no estar enterado de dónde se están desechando los objetos que deberían desecharse de manera oportuna.
Sin embargo, hay suficientes ocasiones en las que es una situación válida NO declarar implementaciones IDisposable
en una instrucción de uso para que una regla como esta se convierta en un problema muy rápidamente. La mayoría de las veces, este caso toma una implementación de IDisposable
como parámetro de un método.
Lo que hago no es decir usos de clases donde los detalles de implementación eliminan la necesidad de llamar a Dispose
, (por ejemplo MemoryStream
o DataContext
); Aquellos implementan IDisposable
y siempre deben tener Dispose
, independientemente de los implementación detalles, ya que siempre es mejor codificar contra el contrato expuesto.
FXCop no realiza la comprobación de código estático, comprueba el ensamblado compilado (IL). El análisis de código estático se realiza a través de StyleCop. –
@BeowulfOF, yo diría que FXCop hizo la verificación de código estático, simplemente no verifica el número de espacios que tiene a cada lado de un "=", etc. StyleCop hace más control de estilo, p. id no rastrea el flujo de control entre métodos, etc. –
Microsoft afirma que FXCop analiza solo los ensamblados, no el código fuente. http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx –