2009-07-06 6 views

Respuesta

6

Visual Studio, por sí mismo no tiene esta característica, pero con CodeRush puede tener advertencias y refactorizaciones tiempo de diseño para insertar el uso de bloques donde sea necesario.

+2

ReSharper hará esto también. –

+0

CodeRush Xpress está incluso disponible GRATIS: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/ –

+0

FxCop y Genderme también lo harán (ambos gratis) – Paco

1

No creo que se pueda hacer en tiempo de compilación.

Sin embargo, se puede hacer en tiempo de ejecución.
He creado una clase abstracta 'Desechable' (que implementa IDisposable e implementa el patrón Desechable). En el finalizador, emite un Assert cuando se llama al finalizador, y el objeto no se ha eliminado.

he basado esto en un artículo de Ian Griffiths:

http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking

+1

yo argumentaría en contra de tener una clase base para el manejo de la eliminación . Dado que .NET es de herencia única, esto lo encadena a una cadena de herencia muy estricta que requiere que su DisposeBase esté en la parte superior. –

+0

además de que podría simplemente usar "System.ComponentModel.Component" –

0

No estoy seguro de si está usando C# o VB, pero en C#, la "mejor práctica" para manejar objetos de tipo IDisposable es colocar el código en un bloque de uso.

"La instrucción using permite al programador especificar cuándo los objetos que usan recursos deben liberarlos. El objeto provisto a la instrucción using debe implementar la interfaz IDisposable. Esta interfaz proporciona el método Dispose, que debe liberar los recursos del objeto." - MSDN Link

HTH,

-Dan

+3

Esto de ninguna manera responde la pregunta. –

+0

¿Se puede configurar Visual Studio 2008 para que me avise si creo un objeto que implementa IDisposable y luego me olvido de encerrarlo dentro de un bloque de uso? – ChrisW

2

Si enciende FxCop diseño de las reglas que le dirá cuando no implementar IDisposable y tiene miembros que implementan IDisposable, así:

class Program 
{ 
    private DataTable NotDisposed; 

    public Program() 
    { 
     NotDisposed = new DataTable(); 
    } 
    static void Main() 
    { 
    } 
} 
+0

FxCop es ideal para este tipo de cosas. 'Por supuesto, sería bueno si el estudio visual realmente te advirtiera si cometiste un error al usar (o implementando IDisposable), pero diablos. –

Cuestiones relacionadas