Dispose()

30/10/2004 - 23:30 por Enrique | Informe spam
Hola Grupo

Como hago para que se destruya mi objeto (uno creado por mi)?
Yo le puse la interfaz IDisposable, y en el metodo Dispose() ejecuto
GC.Collect(), y pongo en null todas las variables incluyendo el mismo
objeto? Esta bien eso?
 

Leer las respuestas

#1 Hector Bejarano
31/10/2004 - 04:04 | Informe spam
Hola Enrique,

Este es un ejemplo tomado del libro "Developing Web Services and Server
components with VB.NET and C#.NET" de Microsoft Press.

El ejemplo que estoy poniendo esta en C#, es importante que no pierdas de
vista un concepto clave, si pones el objeto en null antes de realizar un
Dispose(), lo que realmente estas haciendo es poniendo en null la direccion
de memoria en donde se encuentra el objeto, no estas liberando los recursos
que este utiliza.

// Implementing IDisposable implies that the
// instances of this class will use unmanaged resources

public class Parent:IDisposable
{
// An unmanaged resource
private IntPtr ptr;

// A Managed resource
private System.Timers.Timer timer;

// Variable to track call to Dispose method
private bool disposed;

public Parent()
{
// Implement constructor

}

public void Dispose()
{
// Call the overloaded Dispose method
// with true as argument, indicating that
// Dispose is called by the user of the object
Dispose(true);
// Suppress the Finalize method
// so that it does not call Dispose again
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool called_by_user )
{
if (!this.disposed)
{
// if the user of the object called the Dispose method
// Clean managed as well as unmanaged data
// Otherwise clean only unmanaged data
if (called_by_user)
{
// Clean managed data
timer.Dispose();
}
ptr = IntPtr.Zero;
disposed = true;
}
}
// C# destructor which is used to execute the finalization code
~Parent()
{
Dispose(false);
}

}

public class Child:Parent
{.
.
.

protected override void Dispose(bool called_by_user)
{
// Cleanup code for the child object
.
.
.

// Call Dispose method of the Parent class
base.Dispose(called_by_user);

}

}Despues de realizer la liberacion de los recursos, el garbage collector
va a determinar que los objetos no son alcanzables, y va a liberar la
memoria.Hector Bejarano."Enrique" wrote in message
news:%23$ Hola Grupo

Como hago para que se destruya mi objeto (uno creado por mi)?
Yo le puse la interfaz IDisposable, y en el metodo Dispose() ejecuto
GC.Collect(), y pongo en null todas las variables incluyendo el mismo
objeto? Esta bien eso?

Preguntas similares