using
es una palabra clave C# que actúa como un azúcar sintáctico para tratar con objetos IDisposibles. Según MSDN
usando bloque Define un ámbito, fuera del cual se eliminarán un objeto u objetos.
La instrucción using permite al programador especificar cuándo los objetos que usan recursos deberían liberarlos. El objeto proporcionado a la instrucción using debe implementar la interfaz IDisposable. Esta interfaz proporciona el método Dispose, que debería liberar los recursos del objeto.
Sorprendentemente, incluso MSDN no aclara cómo sucede esto bajo el capó. Solo dice que el objeto tiene que implementar una interfaz IDisposable que proporcione el método Dispose en el objeto que implementa la interfaz.Por lo tanto, para disponer del objeto necesitará llamar al método Dispose en el objeto que limpiará y liberará los recursos utilizados por el objeto.
Tome un vistazo a este ejemplo ..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BlogSamples
{
class Program
{
static void Main(string[] args)
{
//Assume that Car is IDisposible.
using (Car myCar = new Car(1))
{
myCar.Run();
}
}
}
}
compilador convierte a código para tener este aspecto ..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BlogSamples
{
class Program
{
static void Main(string[] args)
{
//Declare myCar object with FullName of the type as seen in IL.
BlogSamples.Car myCar;
//Instantiate the object by calling the constructor, matching the flow of IL.
myCar = new Car(1);
try
{
myCar.Run();
}
finally
{
if(myCar != null)
myCar.Dispose();
}
}
}
}
Para entender cómo funciona exactamente los bloques utilizando bajo el capó, recomiendo lees esto blog-post.
http://www.ruchitsurati.net/index.php/2010/07/28/understanding-%E2%80%98using%E2%80%99-block-in-c/
no veo cuál es el problema con una palabra clave que requiere sus "argumentos" para implementar una interfaz. 'foreach' es también una palabra clave y requiere que la colección sea' IEnumerable'. – sepp2k
@ sepp2k - punto pedante: * NO * necesita IEnumerable for foreach. –
@Marc Gravell: ¿Qué quieres decir? de acuerdo con un enlace msdn dice "System.Collections.IEnumerable o System.Collections.Generic.IEnumerable" http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx –