Patrón para IDisposable
El siguiente debería ser el patrón general a utilizar para implementar IDisposable:
1 public class DisposableClass : IDisposable
2 {
3 //Finalizador.
4 //Llamado por el GC al eliminar el objeto de memoria.
5 ~DisposableClass()
6 {
7 //Liberamos los recursos no manejados
8 Dispose(false);
9 }
10
11 //Llamado explicitamente por el desarrollador.
12 //bien usando using o invocandolo explicitamente.
13 public void Dispose()
14 {
15 //Llamamos a Dispose para liberar los recursos mantenidos por la clase
16 Dispose(true);
17 //Puesto que ya hemos realizado la liberación de recursos, no es
18 //necesario que el GC llame al finalizador
19 System.GC.SuppressFinalize(this);
20 }
21
22 //Esta función aglutina todo el proceso de liberación de recursos.
23 //Se invoca desde el finalizador pasando false, pues el finalizador solo
24 //debe liberar recursos no manejados.
25 //Se invoca desde el método Dispose pasando true pues queremos en ese caso
26 //liberar todos los recursos valisos agregados por el objeto, sena estos
27 //manejados o no.
28 protected virtual void Dispose(bool disposing)
29 {
30 if (disposing)
31 {
32 //Liberar aquí los objetos manejados agregados en esta clase
33 //que implementen IDisposable llamando explicitamente a su método Dispose.
34 }
35
36 //Liberar aquí todos los recursos no manejados.
37 }
38 }
