Что это означает в C#?Что означает использование объекта obj = new Object()?
using (object obj = new object())
{
//random stuff
}
Что это означает в C#?Что означает использование объекта obj = new Object()?
using (object obj = new object())
{
//random stuff
}
Это означает, что obj
реализует IDisposible
и будет утилизировать после using
блока. Это функционально так же, как:
{
//Assumes SomeObject implements IDisposable
SomeObject obj = new SomeObject();
try
{
// Do more stuff here.
}
finally
{
if (obj != null)
{
((IDisposable)obj).Dispose();
}
}
}
using (object obj = new object())
{
//random stuff
}
эквивалентно:
object obj = new object();
try
{
// random stuff
}
finally {
((IDisposable)obj).Dispose();
}
Почти эквивалент. В первом примере obj выходит за пределы области действия}. Во-вторых, он все еще находится в сфере охвата. Подобно эквивалентности for-while. –
это способ охвата объекта, поэтому метод Dispose вызывается на выходе. Это очень полезно для соединений с базой данных в частности. ошибка компиляции будет возникать, если объект не реализует idisposable
гарантирует, что выделенный объект правильно размещен после блока использования, даже если в блоке возникает необработанное исключение.
Почему он существует?
Он существует для классов, в которых вы заботитесь о своей жизни, в частности, когда класс обертывает ресурс в ОС и вы хотите немедленно его выпустить. В противном случае вам придется подождать финализаторы CLR (не детерминированные).
Примеры, дескрипторы файлов, соединения DB, подключение розеток, ....
Это синтаксический сахар –
Я не согласен - это хорошо известный образец и поэтому поощряет общую хорошую практику. для цикла тоже синтаксический сахар - но он всегда используется, потому что это распространенная идиома также я пытался объяснить, почему вы ее видите - и почему вы увидите версию без сахара – pm100
Для справок, это описано в разделе 8.13 на C# спецификации. –