Это очень сильно зависит от области действия рассматриваемой переменной.
Локальная область: использование
Если переменная находится в локальной области, да, вы должны заключить соответствующий код в using
блок.Помните, что блок using
является всего лишь синтаксическим сахаром для следующего, предполагая, что using
заключает в себе IDisposable объект с именем obj
:
var obj = // ...
try
{
// ...
}
finally
{
obj.Dispose();
}
Это означает, что даже если выдается исключение, ваш объектбудет удален.
Область действия класса: IDisposable
Если ваш объект ограничен на уровне класса, то нет, вы не должны заключать его в блок using
.Скорее, ваш класс должен предоставлять метод Dispose
любому коду, который его использует, реализуя IDisposable
и располагать объект там.
Никогда не использовать: Finalize
Как правило, это плохопрактиковаться в передаче ответственности за удаление сборщику мусора в любой точке этой цепочки зависимостей, полагаясь на финализатор класса для удаления его объектов.Это подрывает разницу между Dispose
и Finalize
: Dispose
для явного немедленного освобождения ресурса, тогда как Finalize
более пассивен.Полагаясь на Finalize
для вызова Dispose
, вы подрываете это разделение целей.Тем не менее, это больше вопрос стиля программирования с моей стороны, и представляет собой мнение - не принимайте это как факт.Вы должны исследовать это больше самостоятельно - и, конечно, прочитать неизбежный массив входящих комментариев по этому вопросу - прежде чем принимать мой совет.Я уверен, что пропустил важные исключения, по крайней мере.