【问题标题】:Using statement with more than one system resource使用多个系统资源的语句
【发布时间】:2009-09-03 15:34:18
【问题描述】:

我在 C# 和 VB 中都使用了 using 语句。我同意所有关于嵌套 using 语句的批评(C# 似乎做得很好,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

所以我的问题是更好的方法是什么?

我的直觉告诉我,如果资源是相关的/依赖的,那么在 using 语句中使用多个资源是合乎逻辑的。

【问题讨论】:

  • 对于 VB 编译器,这些块不完全相同吗?
  • 是的,这些块对于编译器来说是一样的,但是对于不熟悉 Using 的人来说很容易引起混淆

标签: vb.net coding-style using-statement


【解决方案1】:

我的主要语言是 C#,当您在同一范围内拥有许多“堆叠”使用时,大多数人更喜欢“堆叠”使用:

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

VB.NET 的单个 using 语句的问题是它看起来很混乱,很可能会掉到屏幕边缘。所以至少从这个角度来看,VB.NET 中的多次使用看起来更好。

如果将第二种语法与续行结合起来,可能会更好:

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

这让你更接近我认为更好的可读性。

【讨论】:

  • 我接受您的回答,因为您包含了续行示例。我意识到它是提高可读性的一种选择,但使用延续确实开始使它看起来像每个人都喜欢的 C# 结构。
  • 实际上带有续行的 vb 版本比 c# 版本更具可读性!至少我们没有看到一堆usings
【解决方案2】:

它们都是相同的,你应该选择你认为最易读的一个,因为它们在 IL 级别是相同的。

我个人喜欢 C# 通过允许这种语法来处理这个问题的方式:

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

但是,我发现这种形式的 VB.NET 等效项(您的第二个示例)比您的第一个示例中的嵌套 Using 语句的可读性差。但这只是我的看法。选择最适合相关代码可读性的样式,因为考虑到输出相同,这是最重要的。

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 2011-02-07
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多