Область действия переменной и оператор использования в .NET - PullRequest
0 голосов
/ 09 января 2011

Если переменная находится на уровне класса (т. Е. private MyDataAccessClass _dataAccess;, можно ли ее использовать как часть выражения using в методах этого класса для ее правильного удаления?

Разумно ли использоватьэтот метод, или лучше всегда объявлять новую переменную с оператором using (т.е. using (MyDataAccessClass dataAccess = new MyDataAccessClass()) вместо using (_dataAccess = new MyDataAccessClass()))?

Ответы [ 3 ]

3 голосов
/ 09 января 2011

С MSDN :

Вы можете создать экземпляр объекта ресурса и затем передать переменную в оператор using, но это не рекомендуется.В этом случае объект остается в области действия после того, как элемент управления покидает блок using, даже если он, вероятно, больше не будет иметь доступа к своим неуправляемым ресурсам.Другими словами, он больше не будет полностью инициализирован.Если вы попытаетесь использовать объект вне блока using, вы рискуете вызвать исключение.По этой причине, как правило, лучше создавать экземпляр объекта в операторе using и ограничивать его область применения блоком using.

Так что технически это будет работать, так как он будет компилироваться, запускаться и выполнятьсякак задумано.Но это, вероятно, не очень хорошая идея, и она не поможет создать интуитивно понятный код.

2 голосов
/ 09 января 2011

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

0 голосов
/ 09 января 2011

При использовании «использования» внутри метода, только если объект инициализируется внутри оператора using, объект удаляется после закрытия блока using. Поскольку ваш объект определен за пределами блока using, я не верю, что он будет автоматически удален, хотя он должен быть «закрыт», поскольку в остальной части программы все равно будет ссылка на него

...