Exportar (0) Imprimir
Expandir todo

Object.Finalize (Método)

Actualización: noviembre 2007

Permite que un objeto Object intente liberar recursos y realizar otras operaciones de limpieza antes de que el objeto Object sea reclamado por el recolector de elementos no utilizados.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

protected virtual void Finalize()
protected void Finalize()
protected function Finalize()

Finalize está protegido y, por lo tanto, sólo se puede obtener acceso a él a través de esta clase o de una clase derivada.

Este método se invoca de forma automática, después de que un objeto pase a ser inaccesible, salvo que haya sido excluido del proceso de finalización mediante una llamada a SuppressFinalize. Durante el cierre de un dominio de aplicación, se realiza una llamada automática a Finalize para los objetos que no están exentos de finalización, incluso para aquellos objetos que a los que aún se puede obtener acceso. Sólo se realiza una llamada a Finalize para una instancia especificada, a menos que el objeto vuelva a registrarse mediante un mecanismo como ReRegisterForFinalize y no se haya llamado posteriormente a GC.SuppressFinalize.

Todas las implementaciones de Finalize en un tipo derivado deben llamar a la correspondiente implementación de tipo base de Finalize. Este es el único caso en el que se permite al código de la aplicación llamar a Finalize.

Las operaciones de Finalize tienen las siguientes limitaciones:

  • El momento exacto en que se ejecuta el finalizador durante la recolección de elementos no utilizados no está definido. No se garantiza la liberación de recursos en un momento concreto, a menos que se llame a un método Close o a un método Dispose.

  • No se garantiza que los finalizadores de dos objetos se ejecuten en un orden determinado, aunque un objeto haga referencia al otro. Es decir, si el objeto A hace referencia al objeto B y ambos tienen finalizadores, puede que el objeto B ya haya terminado cuando se inicie el finalizador del objeto A.

  • No se ha especificado el subproceso en el que se ejecuta el finalizador.

Puede que el método Finalize no se ejecute hasta su finalización o puede que no llegue a ejecutarse en las siguientes circunstancias excepcionales:

  • Otro finalizador se ha bloqueado de forma indefinida (entra en un bucle infinito, intenta obtener un bloqueo que nunca puede conseguir, etc.). Como el motor en tiempo de ejecución intenta ejecutar los finalizadores hasta su terminación, puede que no se llame a otros finalizadores si un finalizador se bloquea de forma indefinida.

  • El proceso termina sin que el motor en tiempo de ejecución pueda efectuar una limpieza. En este caso, la primera notificación de terminación del proceso por parte del motor en tiempo de ejecución es una notificación DLL_PROCESS_DETACH.

El motor en tiempo de ejecución sigue hasta los objetos Finalize durante el cierre sólo si el número de objetos susceptibles de finalización sigue reduciéndose.

Si Finalize o un reemplazo de Finalize produce una excepción y el motor en tiempo de ejecución no está hospedado por una aplicación que reemplace la directiva predeterminada, dicho motor finalizará el proceso y no se ejecutarán finalizadores ni bloques try-finally activos. Este comportamiento garantiza la integridad del proceso si el finalizador no puede liberar ni destruir recursos.

Notas para los implementadores:

Object.Finalize no realiza ninguna acción de forma predeterminada. Debe ser reemplazado por una clase derivada sólo si es necesario, porque la reclamación durante la recolección de elementos no utilizados suele tardar mucho más tiempo si debe ejecutarse una operación de Finalize.

Si un objeto Object contiene referencias a recursos, Finalize debe ser reemplazado por una clase derivada para que estos recursos se liberen antes de que Object se deseche durante la recolección de elementos no utilizados.

Un tipo debe implementar Finalize cuando utiliza recursos no administrados, como identificadores de archivo o conexiones de base de datos que deben liberarse cuando se reclama el objeto administrado que los utiliza. Vea la interfaz IDisposable para obtener información sobre un medio complementario y más controlable de eliminar recursos.

Finalize puede llevar a cabo cualquier acción, como el restablecimiento de un objeto (es decir, hacer que el objeto vuelva a ser accesible) después de su limpieza durante la recolección de elementos no utilizados. Sin embargo, el objeto sólo puede restablecerse una vez; no se puede llamar a Finalize en objetos restablecidos durante la recolección de elementos no utilizados.

c#

Los destructores son el mecanismo de C# para realizar operaciones de limpieza. Proporcionan mecanismos de protección apropiados, como la llamada automática al destructor de tipo base. En el caso del código de C#, no se puede llamar al método Object.Finalize ni reemplazarlo.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft