[C#] ¿Cómo funciona Using()?

Iniciado por DeMoNcRaZy, 8 Septiembre 2015, 18:27 PM

0 Miembros y 1 Visitante están viendo este tema.

DeMoNcRaZy

Buenas,

Estoy dudoso con el uso de using(){ } he leído referentemente (MSDN) algo de que se ejecuta dicho bloque y luego se elimina, pero no logro entenderlo a la perfección.

Estoy probando con esto:

Código (csharp) [Seleccionar]
Console.WriteLine("Vamos a ejecutar el using ok?");
           string respuesta = Console.ReadLine();

           using(WebClient wc = new WebClient())
           {
               string laUrl = "http://foro.elhacker.net";
               wc.BaseAddress = laUrl;
               Console.WriteLine("Descargando: " + laUrl);
               byte[] myDatabuffer = wc.DownloadData(laUrl);

             
               string download = Encoding.ASCII.GetString(myDatabuffer);
               Console.WriteLine(download);
           }

           Console.WriteLine("\nTermino el programa");


           Console.ReadKey();


Funciona correctamente, pero no logro entender en que casos debo o sería recomendable usarlo y como funciona.

Cualquier información adicional lo agradecería.


Saludos.
Esta página web no está disponible - Google Chrome

ivancea96

El using llama al método Dispose() al salir del bloque, lo que asegura que se liberarán recursos al finalizar el bloque.

Pero bueno, no digo nada que no ponga en MSDN.

Puedes utilizarlo con clases que hereden de IDisposable.

DeMoNcRaZy

Cita de: ivancea96 en  8 Septiembre 2015, 20:29 PM
El using llama al método Dispose() al salir del bloque, lo que asegura que se liberarán recursos al finalizar el bloque.

¿Esto que significa realmente?
¿Qué se ejecuta el using y luego termina y se ejecuta el siguiente bloque (código) no?

Saludos.
Esta página web no está disponible - Google Chrome

ivancea96

Si has programado C++, conocerás los bloques de llaves {}. En estos bloques, las variables que se declaran dentro, "desaparecen" al salir del contexto del bloque.
Las variables declaradas dentro de los paréntesis de using (que serán variables que heredan de IDisposable) tienen asegurado que se llamará a su método Dispose().

Para más información, mira la intefraz IDisposable y el método Dispose, así como su utilidad en elementos del lenguaje C#.

Eleкtro

#4
Para entender la finalidad de la declaración using, el método Dispose / Finalize / Close o la interfáz IDisposable tal vez deberías empezar por el principio, por entender cómo se administran los recursos y cómo se liberan los "residuos".

Lee acerca del recolector de basura de .Net aka GarbageCollector (GC).

Fundamentals of Garbage Collection - MSDN
Garbage Collection - MSDN
Garbage Collector Basics and Performance Hints - MSDN
+
Dispose Pattern - MSDN

Pero un resumen rápido sería más o menos cómo lo que ya han mencionado, cuando finaliza el bloque del using automáticamente se llama al método Dispose el cual se encarga de liberar los recursos utilizados por la instancia del objeto idisposable en cuestión.

Hay que tener en cuenta que la finalidad de algunos miembros simplemente existen para simplificar la escritura de código y conseguir una estructura mejor, pero por cuestión de estética más que nada, cómo lo es el caso de using o cómo lo es también la función Enumerable.AsEnumerable por poner otro ejemplo, simplemente son cosas opcionales que proporcionan un mejor rendimiento o mejor experiencia de cara al usuario, pero que realmente no son estrictamente necesarias de utilizar.

Saludos








DeMoNcRaZy

Gracias por las respuestas.
Me fueron muy útiles, me leí MSDN y ahora entiendo lo de IDiposable, etc..

Saludos.
Esta página web no está disponible - Google Chrome