Удерживает ли меня оператор using от закрытия или уничтожения объектов?
Вопрос
Если я использую что-то вроде:
родовое словоНужно ли мне делать conn.close ();или оператор using удерживает меня от последнего вызова?Удаляет ли он все в блоке using?Например, если я назову другие объекты, не связанные между собой, они автоматически уменьшатся?
Спасибо.Мне было неясно, когда я прочитал об использовании на сайте Microsoft.Я хочу убедиться, что у меня нет утечек памяти.
Решение
- Блок using избавится от OdbcConnection.
- Обычные правила области действия работают для всего, что объявлено внутри блока using.
- Блок 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, поэтому ваш код в основном эквивалентен:
родовое слово