используя, в смысле
using (var foo = new Bar())
{
Baz();
}
На самом деле является сокращением для блока try / finally. Это эквивалентно коду:
var foo = new Bar();
try
{
Baz();
}
finally
{
foo.Dispose();
}
Вы заметите, конечно, что первый фрагмент гораздо более краткий, чем второй, а также что есть много разных вещей, которые вы, возможно, захотите сделать для очистки, даже если выдается исключение. Из-за этого мы создали класс, который мы называем Scope, который позволяет вам выполнять произвольный код в методе Dispose. Так, например, если у вас есть свойство IsWorking, которое вы всегда хотели установить в false после попытки выполнить операцию, вы бы сделали это так:
using (new Scope(() => IsWorking = false))
{
IsWorking = true;
MundaneYetDangerousWork();
}
Вы можете узнать больше о нашем решении и о том, как мы его получили здесь .