domingo 2 de septiembre de 2007

IDisposable

Que es IDisposable?

Basicamente es una interface con solamente un metodo, Dispose(), que hace absolutamente nada. IDisposable nace por que en .Net no hay finalización deterministica, esto es que .Net no ofrece ninguna garantia de cuando sera llamado el finalizador de un objeto. Cualquier objeto que el programador deja de utilizar, permanecerá en memoria hasta que el Garbage Collector venga a buscarlo y eliminarlo, matarlo, finalizarlo, destruirlo... entiendes la idea?

Sin IDisposable, cuando querias estar seguro de que un recurso (ej: handle de un archivo abierto) este libre otra vez, tenias que implementar algun metodo como CerrarArchivo() o LiberarHandle() que podria ser usado para soltar estos recursos inmediatamente. IDisposable es meramente una forma estandarizada de proveer tales metodos al usuario. En otras palabras, es la forma fashion de hacerlo.

Una implementación simple

Se puede implementar IDisposable de una manera muy simple, solamente agregando IDisposable a la lista de interfaces implementadas por la clase y escribiendo el codigo de finalizacion en el metodo Dispose(). Aqui hay un ejemplo de como hacerlo:

class MyClass : IDisposable {

// Liberar Inmediatamente todos los recursos adquiridos por el objeto
public void Dispose() {
// Ejecutar liberacion del objeto aqui.
}
}

IDisposabe y la directiva using
C# provee una forma breve para estos casos, en que quieras utilizar objetos de corta vida y liberar sus recursos inmediatamente.

void Test()
{
using(MyClass myObject = new MyClass())
{
//Hacer algo con myObject aqui.
}
}

Puedes ver una implementacion mas completa aqui.

saludos.