Del mismo artículo: "Hay muy pocos buenos usos de la resurrección, y realmente debería evitarla si es posible".
El mejor uso que puedo pensar es un patrón de "reciclaje". Considere una fábrica que produce objetos caros, prácticamente inmutables; por ejemplo, objetos instanciados al analizar un archivo de datos, o al reflejar un ensamblaje, o al copiar profundamente un gráfico de objetos "maestro". Es poco probable que los resultados cambien cada vez que realice este costoso proceso. Le conviene evitar la creación de instancias desde cero; sin embargo, por algunas razones de diseño, el sistema debe poder crear muchas instancias (sin singletons), y sus consumidores no pueden conocer la fábrica para que puedan "devolver" el objeto ellos mismos; pueden tener el objeto inyectado o recibir un delegado de método de fábrica del que obtienen una referencia. Cuando la clase dependiente sale del alcance, normalmente la instancia también lo haría.
Una posible respuesta es anular Finalize(), limpiar cualquier parte del estado mutable de la instancia, y luego, mientras la fábrica esté dentro del alcance, vuelva a conectar la instancia a algún miembro de la fábrica. Esto permite que el proceso de recolección de basura, en efecto, "recicle" la valiosa porción de estos objetos cuando de otro modo saldrían del alcance y se destruirían por completo. La fábrica puede mirar y ver si tiene algún objeto reciclado disponible en su "contenedor", y si es así, puede pulirlo y distribuirlo. La fábrica solo tendría que crear una instancia de una nueva copia del objeto si la cantidad total de objetos en uso aumentaba.
Otros posibles usos pueden incluir una implementación altamente especializada de registrador o auditoría, donde los objetos que desea procesar después de su muerte se unirán a una cola de trabajos administrada por este proceso. Después de que el proceso los maneja, pueden ser totalmente destruidos.
En general, si desea que los dependientes PIENSE que se están deshaciendo de un objeto, o para no tener que molestarse, pero desea conservar la instancia, la resurrección puede ser una buena herramienta, pero tendrá que Mírelo MUY cuidadosamente para evitar situaciones en las que los objetos que reciben referencias resucitadas se conviertan en "ratas paquete" y conserve cada instancia que se haya creado en la memoria durante la vida del proceso.
Si un desarrollador que trabaja para mí escribió ese código, me gustaría que lo destruyan. –
@John: Estoy completamente de acuerdo, es realmente algo para casos extremos, IMO. –
@John: Lo entiendo claramente y mi interés es simplemente científico :) – Vokinneberg