Según la documentación (MSDN: link), está claro que se debe usar el patrón IDisposable al implementar un finalizador.Finalizador e IDisposable
Pero, ¿necesita implementar un finalizador si implementa IDisposable (para proporcionar una forma determinista de deshacerse del objeto), y no tiene ningún recurso no administrado para limpiar?
Como yo lo veo, si la clase solo tiene recursos administrados y si no llama a Dispose, los recursos gestionados se limpiarán automáticamente por el GC y, por lo tanto, no es necesario implementar el finalizador. ¿Me equivoco?
Además, ¿qué sucede si estoy utilizando mi método Dispose para limpiar los controladores de eventos. Como Dispose no será llamado automáticamente por el GC, ¿debería implementar un Finalizer para asegurarme de que los manipuladores de eventos no estén conectados?
Basado en todos los comentarios, escribí una publicación en el blog sobre este tema: http://blog.aggregatedintelligence.com/2010/10/idposable-and-finalizers.html –
Se escribió mucha información sobre los finalizadores antes del SafeHandle clase fue agregada a .Net 2.0. Puede ser bueno seguir el patrón Dispose, ya que las personas que mantengan su código en el futuro pueden esperarlo, pero muy pocas clases deberían tener finalizadores, y no puedo pensar en * cualquier * caso donde una clase derivada de una base no trivial debería tener un finalizador A menos que uno use alguna magia arcana, los finalizadores no harán nada útil con los eventos; Los eventos colgantes evitarán que se ejecute un finalizador a menos que o hasta que las circunstancias hagan que su limpieza sea irrelevante. – supercat