using
- это ключевое слово C #, которое действует как синтаксический сахар для работы с IDisposible объектами.Согласно MSDN
using block Определяет область действия, за пределами которой будет удален объект или объекты.
Оператор using позволяет программисту указывать, когда объекты, которые используютресурсы должны освободить их.Объект, предоставленный оператору using, должен реализовывать интерфейс IDisposable.Этот интерфейс предоставляет метод Dispose, который должен высвобождать ресурсы объекта.
Удивительно, но даже MSDN не проясняет, как это происходит под капотом.Это только говорит, что объект должен реализовать интерфейс IDisposable, который предоставляет метод Dispose для объекта, реализующего интерфейс.Поэтому для удаления объекта необходимо вызвать метод Dispose для объекта, который очистит и освободит ресурсы, используемые объектом.
Посмотрите на этот пример.
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();
}
}
}
}
Компилятор преобразует код в следующий вид:
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();
}
}
}
}
Чтобы понять, как именно работает блок «под капотом», я рекомендую прочитать это сообщение в блоге .
http://www.ruchitsurati.net/index.php/2010/07/28/understanding-%E2%80%98using%E2%80%99-block-in-c/