Использование инструкции с более чем одним системным ресурсом

Я использовал оператор using как в C#, так и в VB. Я согласен со всеми критиками вложенности с использованием выражений (С# кажется хорошо сделанным, VB не очень)

Имея это в виду, я был заинтересован в улучшении своих операторов VB using, «используя» более одного системного ресурса в одном блоке:

Пример:

Using objBitmap As New Bitmap(100,100)
    Using objGraphics as Graphics = Graphics.From(objBitmap)
    End Using
End Using

Можно было бы написать так:

Using objBitmap As New Bitmap(100,100), objGraphics as Gaphics = Graphics.FromImage(objbitmap)
End Using

Итак, мой вопрос: какой метод лучше?

Моя интуиция подсказывает мне, что если ресурсы связаны/зависимы, то использование более одного ресурса в операторе использования логично.


person PersistenceOfVision    schedule 03.09.2009    source источник
comment
Разве эти блоки не идентичны для компилятора VB?   -  person Wim ten Brink    schedule 03.09.2009
comment
Да, блоки одинаковы для компилятора, но очень легко могут запутать кого-то, кто не знаком с использованием   -  person PersistenceOfVision    schedule 03.09.2009


Ответы (2)


Мой основной язык — C#, и там большинство людей предпочитают «сложенные» варианты использования, когда многие из них находятся в одной области видимости:

using (X)
using (Y)
using (Z)
{
    // ...
}

Проблема с единственным оператором использования, который есть в VB.NET, заключается в том, что он кажется загроможденным и, вероятно, упадет за край экрана. Так что, по крайней мере, с этой точки зрения множественное использование выглядит лучше в VB.NET.

Возможно, если вы объедините второй синтаксис с продолжением строки, это будет выглядеть лучше:

Using objBitmap As New Bitmap(100,100), _
      objGraphics as Graphics = Graphics.FromImage(objbitmap)
    ' ...
End Using

Это приближает вас к тому, что я считаю лучшей читабельностью.

person bobbymcr    schedule 03.09.2009
comment
Я принимаю ваш ответ из-за того, что вы включили пример продолжения строки. Я знал об этом как о возможности улучшить читабельность, но использование продолжения действительно начинает выглядеть как предпочитаемая всеми структура C#. - person PersistenceOfVision; 03.09.2009
comment
на самом деле версия vb с продолжением строки намного читабельнее, чем версия c#! по крайней мере, мы не видим кучу using - person Unicornist; 11.07.2014

Они оба одинаковы, вы должны выбрать тот, который вы считаете наиболее читаемым, поскольку они идентичны на уровне IL.

Мне лично нравится, как C# справляется с этим, разрешая такой синтаксис:

using (Foo foo = new Foo())
using (Bar bar = new Bar())
{
    // ....
}

Однако я считаю, что эквивалент VB.NET этой формы (ваш второй пример) менее удобочитаем, чем вложенные операторы Using из вашего первого примера. Но это только мое мнение. Выберите стиль, который лучше всего подходит для удобочитаемости рассматриваемого кода, поскольку это наиболее важно, учитывая, что вывод идентичен.

person Andrew Hare    schedule 03.09.2009