Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Объект imageFrame определен с помощью блока using. Это означает, что когда выполнение блока кода завершиться, объект imageFrame больше не потребуется, и он может быть уничтожен.
using всего лишь гарантирует (кстати, не на 100%) вызов Dispose (и одновременно ограничивает область видимости). Проще говоря, это синтаксический сахар вокруг try...finally.using вообще не нужен, достаточно блок объявить.Не совсем. Он ещё делает объект доступным только для чтения.
А когда не гарантирует?
try (например, ThreadAbort). Или, что более занятно, если вы используете using вместе с object initializer (кстати, мне интересно, не поменяли ли это поведение после C# 4).А когда не гарантирует? Или вы о случае, когда объект инициируется в null?
using(new CompositeDisposable(databases.Select(db=>db.OpenTransaction()))
{
/**/
}
using(await db.OpenTransactionAsync())
{
/**/
}
using(db.OpenTransactionAsync()) //тут мы прибьем только таску, так что для синхронных операций ошибку заметим не сразу.
{
/**/
}
Заголовок этого сообщения обескураживает, не правда ли?
этот перевод
Проигнорировал. И что?
спецификация языка С#
В спецификации «удаление ресурса».
using — явно описано на страницах 258 и 259 английской спецификации от C# 5, начиная со слов «A using statement [...] corresponds to one of three possible expansions» (где, собственно, и видно, что нет никакого «удаления»).Где угодно, только не в спецификации. Русский перевод должен соответствовать исходному тексту.
Рискну предложить следующий:
«Оператор using получает один или несколько ресурсов, выполняет заданный оператор языка и затем освобождает ресурсы.»
Кстати, хочу обратить внимание, что в исходной статье нет утверждения о том, что именно using удаляет или уничтожает объект.
using.На данном уровне необходимо убедиться лишь в четкости базовых представлений соискателя. Т.е. выясняем что делает слово using, но не как.
using делает ровно одно: гарантирует вызов Dispose. Как он это делает — действительно второй вопрос. Но ничего, кроме вызова Dispose, using не делает. Вот такие вот базовые представления, да.Если это замечание касается «уничтожения объекта», то, спасибо за поправку, я согласен с замечанием. В спецификации «удаление ресурса».
{
ColorImageFrame imageFrame = e.OpenColorImageFrame();
// здесь ваш код
}
Using или Using?