Middle
¿Qué es la interfaz IDisposable y para qué se utiliza en C#?
sobes.tech AI
Respuesta de la IA
IDisposable — es una interfaz que proporciona un mecanismo para liberar recursos no gestionados. Contiene un método Dispose().
Se utiliza para:
- Liberar recursos no gestionados: Como descriptores de archivos, conexiones a bases de datos, sockets de red.
.NETno puede gestionar automáticamente estos recursos. - Limpieza después del uso: Garantiza que los objetos que consumen muchos recursos se liberen correctamente, incluso si ocurren excepciones.
- Uso conjunto con el operador
using: El operadorusingllama automáticamente al métodoDispose()al finalizar el bloque de código, incluso si ocurre una excepción. Es la forma preferida de usar objetos que implementanIDisposable.
Ejemplo de implementación:
public class MyResource : IDisposable
{
// Simulación de recurso no gestionado
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Asignación de recurso no gestionado
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// Método Dispose de la interfaz IDisposable
public void Dispose()
{
Dispose(true);
// Anula la finalización, ya que los recursos ya han sido liberados
GC.SuppressFinalize(this);
}
// Método virtual para implementar la lógica de liberación
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Liberar recursos gestionados, si los hay
// ...
}
// Liberar recursos no gestionados
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Finalizador (destructor) para liberar recursos si Dispose no fue llamado explícitamente
~MyResource()
{
Dispose(false);
}
}
Ejemplo de uso con using:
using (var resource = new MyResource())
{
// Trabajo con el recurso
// ...
} // Dispose() se llama automáticamente al salir del bloque using