Saltar al contenido

Usando el bloque de uso

Los documentos dicen que las cosas en un bloque de uso deben implementar IDisposable – ¿qué es IDisposable y cómo se implementa? En términos formales, IDisposable es una interfaz en el espacio de nombres del sistema, algo bastante esencial. IDisposable es literalmente la interfaz más simple posible, la interfaz más simple y significativa de todos modos – tiene un método único y vacío:

1publicvoidDispose();

csharp

Usando el bloque de uso
Usando el bloque de uso

De aquí viene el método Dispose que el bloque de uso llama – porque cualquier variable en un bloque de uso tiene garantizado el Dispose, el compilador sabe que podemos llamarlo. Un punto clave:

Lo que precisamente el método Dispose() dispone depende totalmente del desarrollador.

Si te imaginabas que había algún tipo de marco o magia de gestión de recursos, sólo porque implementamos una interfaz particular y la llamamos Dispose, estabas equivocado. El método Dispose es sólo un lugar acordado para poner tu lógica de limpieza, depende del desarrollador asegurarse de que esa lógica de limpieza hace lo que se supone que debe hacer. Todo esto es un largo camino de decir que sólo porque estás llamando a disposeción en tu PriceClient, no significa que esté llamando a ForceClose o cerrando la conexión correctamente de otra manera.

Por suerte, como la biblioteca de su proveedor es de código abierto, puede revisar el contenido real de Deshacerse en el objeto:

123456classPriceClient:IDisposable{publicvoidDispose(){this.ForceClose();}

csharp

Esto significa que este código:

12345678usando(var precioCliente =nuevoPrecioCliente()){ precioCliente.Conectar();var actualizadoprecio = precioCliente.ObtenerPrecio();devolver actualizadoprecio;}

csharp

Hace exactamente lo mismo que esto:

123456789101112try{ precioCliente.Conectar();var actualizadoPrecio = precioCliente.ObtenerPrecio();return actualizadoPrecio;}finalmente{ precioCliente.ForzarCerrar();}

csharp

Pero sólo porque hemos verificado que Dispose() llama a ForceClose . Si no lo hubiéramos hecho, o no lo hiciera, no sabríamos con seguridad que las dos declaraciones son equivalentes.