Удерживает ли меня оператор using от закрытия или уничтожения объектов?

StackOverflow https://stackoverflow.com/questions/513407

  •  21-08-2019
  •  | 
  •  

Вопрос

Если я использую что-то вроде:

родовое слово

Нужно ли мне делать conn.close ();или оператор using удерживает меня от последнего вызова?Удаляет ли он все в блоке using?Например, если я назову другие объекты, не связанные между собой, они автоматически уменьшатся?

Спасибо.Мне было неясно, когда я прочитал об использовании на сайте Microsoft.Я хочу убедиться, что у меня нет утечек памяти.

Это было полезно?

Решение

  1. Блок using избавится от OdbcConnection.
  2. Обычные правила области действия работают для всего, что объявлено внутри блока using.
  3. Блок using не будет очищать другие объекты IDisposable. Очищает только заявленный предмет
    • обратите внимание, что вы можете вкладывать блоки, или, если элементы одного типа, несколько элементов могут быть инициализированы одновременно.

См. верхнюю часть моего другого ответа для Как использовать ключевое слово using в C # для получения дополнительной информации.

Я также должен упомянуть, что вы можете закрыть (удалить) соединение, как только вы закончите с ним, чтобы освободить ресурс. В рекомендациях говорится, что вызывающий должен иметь возможность многократно вызывать метод удаления. Блок using - это, по сути, просто подстраховка, позволяющая писать более четкий код в большинстве случаев.


[Изменить] например множественная инициализация при использовании: инициализировать более одного объекта в одном и том же использовании без необходимости вложения блоков с использованием, если объекты одного типа:

родовое слово

Джоэл Коэхорн упомянул о наложении, которое является вложением, но без фигурных скобок, так же как вы можете опустить фигурные скобки в операторе for или if. Пользовательский интерфейс не переформатируется с отступом. Мне было бы любопытно, как выглядит Ил.

родовое слово

Использование кода error CS1044: Cannot use more than one type in a for, using, fixed, or declaration statement. для размещения разных объектов является ошибкой

родовое слово

Другие советы

Оператор using будет обрабатывать вызовы методов Close и Dispose за вас.

Скотт Хансельман дает довольно хорошее объяснение оператора using.

Оператор using обеспечивает удаление объекта, реализующего IDisposable.Он удалит только объект, на который имеется ссылка в блоке using, поэтому ваш код в основном эквивалентен:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top