Есть ли в C # гарантии, что оператор using не унаследует проблемы с комбинациями try + finally?
Вопрос, естественно, следует за обсуждением других здесь.
Согласно документации:
using (var font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
Пример кода ранее расширяется до следующего кода во время компиляции (обратите внимание на дополнительные фигурные скобки для создания ограниченной области для объекта):
{
var font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
Итак, есть ли гарантии, что метод finally для .Dispose
будет вызываться все время в C #? В случае, если это так, означает ли это, что using
фактически расширится до чего-то другого, чем просто комбинация try + catch?
ОБНОВЛЕНИЕ
В двух словах, о чем идет речь. Существует известная проблема, не позволяющая использовать комбинацию try + finally. Проблема обсуждается здесь. В вопросе я спрашиваю, относится ли проблема к using
, поскольку using
совпадает с комбинацией try + catch (согласно документации, указанной выше).
using
в _2 _ / _ 3_ (но я не знаю наверняка) - person Rufus L   schedule 11.02.2020finally
. Поскольку у вас нет контроля над блокомfinally
, который генерируетusing
, вам придется добавить свой собственныйtry/finally
вокругusing
- person Rufus L   schedule 11.02.2020try-finally
сdispose()
без обработки исключений, в основном то же самое. - person Train   schedule 11.02.2020The using statement ensures that Dispose is called even if an exception occurs within the using block. You can achieve the same result by putting the object inside a try block and then calling Dispose in a finally block; in fact, this is how the using statement is translated by the compiler.
- person mason   schedule 11.02.2020unhandled exception handler
. Любая память, неуправляемые ресурсы и объекты GDI будут автоматически освобождены Windows, когда ваш процесс все равно завершится. Что еще более важно, вы никогда не должны пытаться продолжить работу своего приложения при обнаружении необработанного исключения, потому что ваше приложение находится в неизвестном состоянии. Так что нет никаких проблем. - person MickyD   schedule 11.02.2020