Сохраняет ли блок using объект живым?
Для некоторых модульных тестов я хочу установить CurrentCulture в определенную культуру (а затем отменить эти изменения позже). Поскольку мне нужно сделать это в нескольких местах, я думал о написании класса CultureChanger, который сохраняет старую культуру и устанавливает новую культуру в своем конструкторе, а затем сбрасывает старую культуру во время ее удаления.
Тогда я мог бы использовать его следующим образом:
using(new CultureChanger(culture)){
//some code and assertions with no references to the CultureChanger
}
Если я это сделал, есть ли риск, что CultureChanger может быть очищен когда-нибудь до того, как использование блока завершает?
3 ответа:
CultureChanger
не будет очищаться до тех пор, пока блокusing
не завершится.Блок
using
определяет область видимости объекта во многом так же, как это делает метод.Нет никакой гарантии на , Когда объект будет собирать мусор после выполнения блока, но это не произойдет раньше.
Оператор Using обеспечивает удобный синтаксис, обеспечивающий правильное использование объектов IDisposable.
Оператор using вызывает метод Dispose для объекта правильным образом, и (когда вы используете его, как показано ранее) он также заставляет сам объект выходить из области видимости, как только Dispose вызывается. В блоке using объект доступен только для чтения и не может быть изменен или переназначен.
Оператор using гарантирует, что Dispose вызывается, даже если исключение возникает при вызове методов для объекта.