У меня есть класс C # с функцией Dispose
через IDisposable
. Он предназначен для использования внутри блока using
, поэтому дорогой ресурс, который он обрабатывает, можно сразу же освободить.
Проблема заключается в том, что произошла ошибка, когда возникла исключительная ситуация до вызова Dispose
, и программист забыл использовать using
или finally
.
В C ++ мне никогда не приходилось беспокоиться об этом. Вызов деструктора класса будет автоматически вставлен в конец области видимости объекта. Единственный способ избежать этого - использовать оператор new и удерживать объект за указателем, но это требует от программиста дополнительной работы - это не то, что они сделали бы случайно, например, забыли использовать using
.
Есть ли способ автоматического использования блока using
в C #?
Большое спасибо.
UPDATE:
Я хотел бы объяснить, почему я не принимаю ответы финализатора. Эти ответы технически правильны сами по себе, но они не являются деструкторами стиля C ++.
Вот ошибка, которую я нашел, сводится к основам ...
try
{
PleaseDisposeMe a = new PleaseDisposeMe();
throw new Exception();
a.Dispose();
}
catch (Exception ex)
{
Log(ex);
}
// This next call will throw a time-out exception unless the GC
// runs a.Dispose in time.
PleaseDisposeMe b = new PleaseDisposeMe();
Использование FXCop
- отличное предложение, но если это мой единственный ответ, мой вопрос должен стать призывом к людям на C # или использовать C ++. Двадцать вложенных с помощью операторов кто-нибудь?