Что делает Используя (…) {…} средний [дубликат]

7
задан Community 23 May 2017 в 12:22
поделиться

8 ответов

с помощью оператора

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) не будет.

См. также:

33
ответ дан 6 December 2019 в 05:01
поделиться

Использование оператора определяет охват, что снаружи его объекты или объекты будут расположены.

0
ответ дан 6 December 2019 в 05:01
поделиться

Использование - это прохладный способ очистки ресурсов, это эквивалентно попробовать {} Catch {}, наконец, утилизируйте}. Эффективный C # имеет элемент на этом, и смотрю, вы получите 10+ аналогичных ответов.

http://www.amazon.com/effective-specific-ways-improve-your/dp/0321245660

0
ответ дан 6 December 2019 в 05:01
поделиться

Использование с использованием оператора определяет объем, в которой можно использовать объект, который реализует интерфейс IDisPosable. Объект будет очищен после выхода блока. См.:

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

0
ответ дан 6 December 2019 в 05:01
поделиться

См. http://msdn.microsoft.com /en-us/library/yh598w02(vs.80).aspx

The с использованием оператора инкапсулирует переменные внутри него в объеме. Когда выполнение выходит с использованием блока, все объекты внутри него расположены из памяти. Вы можете увидеть его с соединениями БД, чтобы при использовании блок выходит, ресурсы, выделенные на это соединение, очищены и закрыты.

0
ответ дан 6 December 2019 в 05:01
поделиться

используя просто инструктирует компилятор написать код, который вызовет метод Dispose на переменной, которую вы используете . Только типы, реализующие 'IDisposable', могут быть использованы с операторами , использующими .

В вашем примере команда cmd2 будет утилизирована, когда код в {} закончится.

4
ответ дан 6 December 2019 в 05:01
поделиться

"Определяет область видимости, за пределами которой будет располагаться объект или объекты"
. См. , используя утверждение

2
ответ дан 6 December 2019 в 05:01
поделиться

use применяется к объектам, реализующим IDisposable. Это гарантирует, что при выходе из блока , использующего (как правило, или через исключение, или как-то так), будет вызван метод Утилизировать одноразового объекта.

2
ответ дан 6 December 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: