с помощью
оператора
using(var disposableObject = new object_that_implements_IDisposable()) { ... }
является синтаксическим сахаром для кода, аналогичного следующему:
var disposableObject = new object_that_implements_IDisposable()
try
{
...
}
finally
{
if(disposableObject != null)
{
((IDisposable)your_object).Dispose();
}
}
Это только применимо для классов, которые реализуют IDisposable. Это полезно для очистки кода, где у вас есть объекты, которые берут, например, системные ресурсы (файловые дескрипторы, соединения с базами данных, сокеты и т.д.), которые нужно почистить после того, как вы закончите освобождать ресурс для остальной части системы.
Теоретически, вы могли бы пропустить вызов .Dispose()
, но тогда вам придется подождать, пока сборщик мусора освободит хранимые ресурсы. GC великолепно знает, когда освободить объекты, чтобы восстановить использование их памяти, но он не имеет ни малейшего представления о том, что ему нужно освободить объекты, чтобы они отказались от других системных ресурсов. Таким образом, эти критические ресурсы могут быть отданы только после того, как ГК решит, что ему нужна память, используемая владельцем. Таким образом, вы определенно хотите избавиться от своих объектов, когда закончите с ними (если они одноразовые)!
Что касается того, почему вы используете , используя
, а не , попробуйте
/, наконец,
, это чисто кодировочное предпочтение. Я предпочитаю использовать
, потому что их можно каскадировать:
using(var a = new class())
using(var b = new class())
using(var c = new class())
using(var d = new class())
{
...
}
Вам понадобится еще несколько строк кода, чтобы сделать это с помощью try
/finally
.
использование
также имеет дополнительные преимущества. Например, в то время как прямой вызов x.Dispose
может привести к тому, что NullReferenceException
, если x
будет равен нулю, using(x)
не будет.
См. также:
Использование оператора определяет охват, что снаружи его объекты или объекты будут расположены.
Использование - это прохладный способ очистки ресурсов, это эквивалентно попробовать {} Catch {}, наконец, утилизируйте}. Эффективный C # имеет элемент на этом, и смотрю, вы получите 10+ аналогичных ответов.
http://www.amazon.com/effective-specific-ways-improve-your/dp/0321245660
Использование с использованием оператора
определяет объем, в которой можно использовать объект, который реализует интерфейс IDisPosable. Объект будет очищен после выхода блока. См.:
См. http://msdn.microsoft.com /en-us/library/yh598w02(vs.80).aspx
The с использованием оператора инкапсулирует переменные внутри него в объеме. Когда выполнение выходит с использованием блока, все объекты внутри него расположены из памяти. Вы можете увидеть его с соединениями БД, чтобы при использовании блок выходит, ресурсы, выделенные на это соединение, очищены и закрыты.
используя
просто инструктирует компилятор написать код, который вызовет метод Dispose
на переменной, которую вы используете . Только типы, реализующие 'IDisposable', могут быть использованы с операторами , использующими
.
В вашем примере команда cmd2 будет утилизирована, когда код в {} закончится.
"Определяет область видимости, за пределами которой будет располагаться объект или объекты"
.
См. , используя утверждение
use
применяется к объектам, реализующим IDisposable
. Это гарантирует, что при выходе из блока , использующего
(как правило, или через исключение, или как-то так), будет вызван метод Утилизировать
одноразового объекта.