Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: DeMoNcRaZy en 8 Septiembre 2015, 18:27 pm



Título: [C#] ¿Cómo funciona Using()?
Publicado por: DeMoNcRaZy en 8 Septiembre 2015, 18:27 pm
Buenas,

Estoy dudoso con el uso de using(){ } he leído referentemente (MSDN) (https://msdn.microsoft.com/es-es/library/yh598w02.aspx?f=255&MSPPError=-2147217396) 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
  1. Console.WriteLine("Vamos a ejecutar el using ok?");
  2.            string respuesta = Console.ReadLine();
  3.  
  4.            using(WebClient wc = new WebClient())
  5.            {
  6.                string laUrl = "http://foro.elhacker.net";
  7.                wc.BaseAddress = laUrl;
  8.                Console.WriteLine("Descargando: " + laUrl);
  9.                byte[] myDatabuffer = wc.DownloadData(laUrl);
  10.  
  11.  
  12.                string download = Encoding.ASCII.GetString(myDatabuffer);
  13.                Console.WriteLine(download);
  14.            }
  15.  
  16.            Console.WriteLine("\nTermino el programa");
  17.  
  18.  
  19.            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.


Título: Re: [C#] ¿Cómo funciona Using()?
Publicado por: 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.

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

Puedes utilizarlo con clases que hereden de IDisposable.


Título: Re: [C#] ¿Cómo funciona Using()?
Publicado por: DeMoNcRaZy en 8 Septiembre 2015, 20:39 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.


Título: Re: [C#] ¿Cómo funciona Using()?
Publicado por: ivancea96 en 8 Septiembre 2015, 22:16 pm
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#.


Título: Re: [C#] ¿Cómo funciona Using()?
Publicado por: Eleкtro en 9 Septiembre 2015, 00:13 am
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 (https://msdn.microsoft.com/en-us/library/ee787088%28v=vs.110%29.aspx)
Garbage Collection - MSDN (https://msdn.microsoft.com/en-us/library/0xy59wtx%28v=vs.110%29.aspx)
Garbage Collector Basics and Performance Hints - MSDN (https://msdn.microsoft.com/en-us/library/ms973837.aspx)
+
Dispose Pattern - MSDN (https://msdn.microsoft.com/en-us/library/b1yfkh5e%28v=vs.110%29.aspx)

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


Título: Re: [C#] ¿Cómo funciona Using()?
Publicado por: DeMoNcRaZy en 9 Septiembre 2015, 19:02 pm
Gracias por las respuestas.
Me fueron muy útiles, me leí MSDN y ahora entiendo lo de IDiposable, etc..

Saludos.